P1833 樱花

news/2024/12/2 19:50:39/

R e s u l t Result Result

...


H y p e r l i n k Hyperlink Hyperlink

https://www.luogu.com.cn/problem/P1833


D e s c r i p t i o n Description Description

有一个 m m m体积的背包,有 n n n种物品,有的有无限个,有的有有限个,选择每个物品都有一定的体积及其贡献
求最大贡献

数据范围:
n ≤ 1 0 4 , m ≤ 1 0 3 n\leq 10^4,m\leq 10^3 n104,m103


S o l u t i o n Solution Solution

显然是一个混合背包,设 f j f_j fj表示空间为 j j j的最大贡献
完全背包的情况直接递推即可
至于有限个的情况,考虑将背包进行二进制拆分,然后跑0/1背包即可(当然你也可以写单调队列优化一下)

前者时间复杂度: O ( n m l o g m ) O(nmlogm) O(nmlogm)
后者时间复杂度: O ( n m ) O(nm) O(nm)


C o d e 1 Code1 Code1

#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;int n,a1,a2,b1,b2,m,nn,ti,ci,pi;
int T[200001],C[200001],P[200001],f[1010];
inline LL read()
{char c;LL d=1,f=0;while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
inline void fj(int ti,int ci,int pi)
{int x=1;while((x<<1)-1<=pi) T[++nn]=x*ti,C[nn]=x*ci,P[nn]=x,x<<=1;while((x<<1)-1>pi) x>>=1;x=(x<<1)-1;if(pi-x!=0) T[++nn]=(pi-x)*ti,C[nn]=(pi-x)*ci,P[nn]=pi-x;return;
}
signed main()
{a1=read();b1=read();a2=read();b2=read();n=read();m=(a2-a1)*60+b2-b1;for(register int i=1;i<=n;i++){ti=read();ci=read();pi=read();if(pi==0) T[++nn]=ti,P[nn]=pi,C[nn]=ci;else fj(ti,ci,pi);}for(register int i=1;i<=nn;i++){if(P[i]==0)for(register int j=T[i];j<=m;j++) f[j]=max(f[j],f[j-T[i]]+C[i]);elsefor(register int j=m;j>=T[i];j--)f[j]=max(f[j],f[j-T[i]]+C[i]);}printf("%d",f[m]);
}

C o d e 2 Code2 Code2

#include<queue>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;int n,a1,a2,b1,b2,m,nn,ti,ci,pi,l,r;
int f[1010];
deque< pair<int,int> >q;
inline LL read()
{char c;LL d=1,f=0;while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
signed main()
{a1=read();b1=read();a2=read();b2=read();n=read();m=(a2-a1)*60+b2-b1;for(register int i=1;i<=n;i++){ti=read();ci=read();pi=read();if(pi==0) for(register int j=ti;j<=m;j++) f[j]=max(f[j],f[j-ti]+ci);elsefor(register int j=0;j<ti;j++){while(q.size()) q.pop_front();l=1;r=0;int maxp=(m-j)/ti;for(register int p=0;p<=maxp;p++){while(q.size()&&f[j+ti*p]-ci*p>=q.back().second) q.pop_back();q.push_back(make_pair(p,f[j+ti*p]-ci*p));while(q.size()&&q.front().first<p-pi) q.pop_front();f[j+ti*p]=max(f[j+ti*p],q.front().second+ci*p);}}}printf("%d",f[m]);
}

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

相关文章

樱花

美丽的樱花~ 求不定方程&#xff1a; 1 x 1 y 1 n ! \frac{1}{x}\frac{1}{y}\frac{1}{n!} x1​y1​n!1​ 的正整数解 (x,y) 的数目。 Input 一个整数 n。 Output 一个整数&#xff0c;表示有多少对 (x,y) 满足题意。答案对 1097 取模。 Example 样例输入 2 样例输出 3…

IE不兼容ES6箭头函数的解决方法

第一种&#xff1a; npm install babel-polyfill --save 页面中引用"polyfill.js" 和 "browser.min.js" JS代码script标签加上 type"text/babel" <script type"text/babel"></script> polyfill为什么可以&#xff1f; va…

樱花何处有?动态樱花飘落图

用言辞表达爱就如用一台有故障的发报机发送密码情报&#xff0c;总是不确定怎样才能被收到。——阿兰德波顿《爱情笔记》 掏心话&#xff1a;以前丢失的东西&#xff0c;到最后或许都得慢慢找回来。 前几天武大的云赏樱甚是好看&#xff0c;可惜本人没有亲自去看过 **花语&a…

漫天樱花表白小程序:“樱花将灿,冬尽风暖“一樱花和你我都想念~(内含多份源码)

&#x1f338;​樱花和你一一一一我都想念樱花&#x1f338; 导语 古人云“人间四月芳菲尽&#xff0c;山寺桃花始盛开”。 ​ 双十一剁手之后很快就要进入双十二剁脚节了吗&#xff1f; 不管是因为太冷才跺脚的还是因为......你知道的&#xff0c;我还不想变成人肉丸子啊啊…

樱花雨

CSS部分 html, body{width: 100%;height: 100%;margin: 0;padding: 0;overflow: hidden; } .container{width: 100%;height: 100%;margin: 0;padding: 0;background-color: #000000; }jquery&#xff08;jquery.min.js&#xff09; var RENDERER {INIT_CHERRY_BLOSSOM_COUNT…

luogu1445 樱花

樱花 link 不要看原题面&#xff0c;不然你会被情侣虐成狗。看我的简述就行。 题面 人话 &#xff1a; 求方程 1 x 1 y 1 n ! \frac{1}{x}\frac{1}{y}\frac{1}{n!} x1​y1​n!1​ 的正整数解&#xff0c;答案对 1 0 9 7 10^97 1097 取模。其中 n ∈ [ 1 , 1 0 6 ] n\…

新版的Eclipse安装的插件都在哪里?

最近&#xff0c;发现新版Eclipse安装的插件不再像以前那样&#xff0c;安装在目录下的plugins的文件夹下&#xff0c;那么&#xff0c;有时候我们自己下载的离线的插件包要放在哪里呢&#xff0c;像往前版本放在目录下的plugins的文件夹下已经不生效了&#xff1a; 那么问题来…

1624:樱花

const int N1e65;int n,m;double t; int i,j,k;int id[N],prime[N],num;//id[i] 表示i的最小质因数在素数表中的位置int cnt[N];//计算 void init() {for(int i2;i<N;i){if(!id[i]){ prime[num]i; id[i]num; for(int ji*2;j<N;ji){if(!id[j]) id[j]num;}}} } /*void init…