P1833 樱花(多重背包)(内附封面)

news/2024/11/8 2:04:35/

樱花

题目背景

《爱与愁的故事第四弹·plant》第一章。

题目描述

爱与愁大神后院里种了 n n n 棵樱花树,每棵都有美学值 C i ( 0 ≤ C i ≤ 200 ) C_i(0 \le C_i \le 200) Ci(0Ci200)。爱与愁大神在每天上学前都会来赏花。爱与愁大神可是生物学霸,他懂得如何欣赏樱花:一种樱花树看一遍过,一种樱花树最多看 P i ( 0 ≤ P i ≤ 100 ) P_i(0 \le P_i \le 100) Pi(0Pi100) 遍,一种樱花树可以看无数遍。但是看每棵樱花树都有一定的时间 T i ( 0 ≤ T i ≤ 100 ) T_i(0 \le T_i \le 100) Ti(0Ti100)。爱与愁大神离去上学的时间只剩下一小会儿了。求解看哪几棵樱花树能使美学值最高且爱与愁大神能准时(或提早)去上学。

输入格式

n + 1 n+1 n+1行:

1 1 1 行:现在时间 T s T_s Ts(几时:几分),去上学的时间 T e T_e Te(几时:几分),爱与愁大神院子里有几棵樱花树 n n n。这里的 T s T_s Ts T e T_e Te 格式为:hh:mm,其中 0 ≤ h h ≤ 23 0 \leq hh \leq 23 0hh23 0 ≤ m m ≤ 59 0 \leq mm \leq 59 0mm59,且 h h , m m , n hh,mm,n hh,mm,n 均为正整数。

2 2 2 行到第 n + 1 n+1 n+1 行,每行三个正整数:看完第 i i i 棵树的耗费时间 T i T_i Ti,第 i i i 棵树的美学值 C i C_i Ci,看第 i i i 棵树的次数 P i P_i Pi P i = 0 P_i=0 Pi=0 表示无数次, P i P_i Pi 是其他数字表示最多可看的次数 P i P_i Pi)。

输出格式

只有一个整数,表示最大美学值。

样例 #1

样例输入 #1

6:50 7:00 3
2 1 0
3 3 1
4 5 4

样例输出 #1

11

提示

100 % 100\% 100% 数据: T e − T s ≤ 1000 T_e-T_s \leq 1000 TeTs1000(即开始时间距离结束时间不超过 1000 1000 1000 分钟), n ≤ 10000 n \leq 10000 n10000。保证 T e , T s T_e,T_s Te,Ts 为同一天内的时间。

样例解释:赏第一棵樱花树一次,赏第三棵樱花树 2 2 2 次。

大致思路

二进制拆分
做法: 把每一个物品根据2的多少次方拆分,因为任何数都可以转化为二进制数

核心思想 :把每一个物品拆成很多个,分别计算价值和所需时间,再转化为01背包求解

最后一点 :完全背包可以把他的空间记为999999,不要太大,一般百万就足够了,当然也可以分开做背包

f [ j ] = m a x ( f [ j ] , f [ j − w [ i ] ] + v [ i ] ) f[j]=max(f[j],f[j-w[i]]+v[i]) f[j]=max(f[j],f[jw[i]]+v[i])

#include<bits/stdc++.h>
using namespace std;
#define int long long int 
#define intt int
const int N=1e5;
int n,zw,M;
int a[N*11],w[N*11],v[N*11],f[110050];
signed main(){char l;int h1,m1,h2,m2;cin>>h1>>l>>m1;cin>>h2>>l>>m2;zw=h2*60+m2-h1*60-m1;cin>>n;M=1;for(int i=1;i<=n;i++){int ww,vv,pp;cin>>ww>>vv>>pp;if(pp==1){w[M]=ww;v[M]=vv;M++;}else {if(pp==0)pp=zw;int tmp=1;while(pp){w[M]=tmp*ww;v[M]=tmp*vv;M++;pp-=tmp;tmp*=2;if(pp<tmp){w[M]=pp*ww;v[M]=pp*vv;M++;break;}}}}for(int i=1;i<=M;i++){for(int j=zw;j>=w[i];j--){f[j]=max(f[j],f[j-w[i]]+v[i]);} }cout<<f[zw];return 0;
}

附封面(秒速五厘米)

请添加图片描述


http://www.ppmy.cn/news/1010051.html

相关文章

基于历史对比学习的时序知识图谱推理(AAAI2023)

知识图谱顶会小记 论文标题 Temporal Knowledge Graph Reasoning with Historical Contrastive Learning 论文链接 https://arxiv.org/pdf/2211.10904.pdf GitHub地址 https://github.com/xyjigsaw/CENET 关键词 Linked Open Data, Knowledge Graphs & KB Completi…

auto-changelog的简单使用

auto-changelog的简单使用 自动化生成Git提交记录&#xff0c;CHANGELOG.md文件 github&#xff1a;https://github.com/cookpete/auto-changelog 安装 npm install -g auto-changelog配置脚本 package.json文件下 "scripts": {"changelog": "aut…

webpack基础知识六:说说webpack的热更新是如何做到的?原理是什么?

一、是什么 HMR全称 Hot Module Replacement&#xff0c;可以理解为模块热替换&#xff0c;指在应用程序运行过程中&#xff0c;替换、添加、删除模块&#xff0c;而无需重新刷新整个应用 例如&#xff0c;我们在应用运行过程中修改了某个模块&#xff0c;通过自动刷新会导致…

-bash: ./startup.sh: Permission denied解决

今天在Linux上启动Tomcat&#xff0c;结果弹出&#xff1a;-bash: ./startup.sh: Permission denied 的提示。 这是因为用户没有权限&#xff0c;而导致无法执行。用命令chmod 修改一下bin目录下的.sh权限就可以了。 在Tomcat的bin目录下 &#xff0c;输入命令行 &#xff1a;c…

03_010物理内存ram分配器,内存区域页分配及水位线等分析

memblock分配器 系统初始化的时候需要执行一些内存管理 内存分配任务就会需要内存管理器 内核初始化时候memblock分配器 先说说这个memblock分配器 有三个重要的结构体 struct memblock 表示这个分配器 内核初始化的时候 有个全局变量struct memblock 因为一个物理内存(节点…

在家下载Springer、IEEE、ScienceDirect等数据库论文的论文下载工具

Springer、IEEE、ScienceDirec数据库是我们查找外文文献常用数据库&#xff0c;当我们没有数据库使用权限的时该如何下载这些数据库的学术论文呢&#xff1f;下面就讲解一下在家下载数据库学术文献的论文下载工具。 一、查找下载外文文献&#xff0c;我们可以谷歌学术检索&…

Docker Compose 使用方法

目录 前言 安装 Docker Compose Ubuntu 安装与更新 Red Hat 安装与更新 验证是否安装 Docker Compose 创建 docker-compose.yml 文件 创建一个MySQL 与 tomcat 示例 使用Docker Compose启动服务 前言 Docker Compose 是一个工具&#xff0c;旨在帮助定义和 共享多容器…

C++拷贝wstring到wchar_t*中踩的坑

使用wchar_t指针将wstring中的数据拿出来&#xff0c;发现释放的时候异常&#xff0c;不是深拷贝和浅拷贝的问题 首先先看看string怎末复制到char中&#xff0c;代码如下 string str1"\"0.2.0\"";char* tnew char[str.size()1];memcpy(t, str1.c_str(), s…