JZOJ3223. 【HBOI2013】Ede的新背包问题
来源:互联网 发布:新致软件成都分公司 编辑:程序博客网 时间:2024/05/16 20:31
分析
对于每一个物品都有一个数量限制,既不一定是1,也不是无限。
所以这并不是一个01背包,也不是无限背包。
但是通过转换我们可以得到01背包。
一种非常显然的方法,将一个物品拆成
如果将
接下来我们就应该考虑去掉第i种物品的最优解。
去掉第i种物品就等同于用
那么我们用01背包求出用前i种物品的最优解以及用后j种物品的最优解。
在询问的时候就将两个最优解合并。
code
#include <cstdio>#include <algorithm>#include <cstring>#include <string.h>#include <cmath>#include <math.h>#define N 1003#define ll long longusing namespace std;struct arr{ int x,y;}a[N*7];int n,m,x,y,z,mi[10],tot,st[N];int f[7*N][N],g[7*N][N],ans[N][N];char ch;void read(int &n){ n=0; ch=getchar(); while((ch<'0' || ch>'9') && ch!='-')ch=getchar(); int w=1; if(ch=='-')w=-1,ch=getchar(); while('0'<=ch && ch<='9')n=n*10+ch-'0',ch=getchar(); n*=w;}void write(int x){ if(x>9) write(x/10); putchar(x%10+'0');}int main(){ mi[0]=1; for(int i=1;i<8;i++) mi[i]=mi[i-1]*2; read(n); for(int i=1;i<=n;i++) { read(x);read(y);read(z); st[i]=tot+1; for(int j=0;z>=mi[j];j++) { a[++tot].x=x*mi[j]; a[tot].y=y*mi[j]; z-=mi[j]; } if(z>0) { a[++tot].x=x*z; a[tot].y=y*z; } } memset(f,0,sizeof(f)); for(int i=1;i<=tot;i++) for(int j=0;j<N;j++) { f[i][j]=f[i-1][j]; if(j>=a[i].x)f[i][j]=max(f[i][j],f[i-1][j-a[i].x]+a[i].y); } memset(g,0,sizeof(g)); for(int i=tot;i;i--) for(int j=0;j<N;j++) { g[i][j]=g[i+1][j]; if(j>=a[i].x)g[i][j]=max(g[i][j],g[i+1][j-a[i].x]+a[i].y); } read(m); memset(ans,0,sizeof(ans)); for(int i=1;i<=m;i++) { read(x);read(y); x++; if(ans[x][y]==0) { for(int k=0;k<=y;k++) ans[x][y]=max(ans[x][y],f[st[x]-1][k]+g[st[x+1]][y-k]); } write(ans[x][y]); printf("\n"); }}
阅读全文
0 0
- JZOJ3223. 【HBOI2013】Ede的新背包问题
- Jzoj3223 Ede的新背包问题
- 【HBOI2013】Ede的新背包问题
- 3223. HEOI2013 Ede的新背包问题
- EDE
- 【HBOI2013】Eden的博弈树
- [bzoj3163][HEOI2013]Eden的新背包问题
- BZOJ3163: [Heoi2013]Eden的新背包问题
- BZOJ3163: [Heoi2013]Eden的新背包问题
- BZOJ 3163 Heoi2013 Eden的新背包问题 多重背包
- 【bzoj3163】 HEOI2013Eden的新背包问题 多重背包
- 【bzoj3163】【Heoi2013】【Eden的新背包问题】【多重背包】
- 3163: [Heoi2013]Eden的新背包问题 多重背包
- bzoj 3163: [Heoi2013]Eden的新背包问题 多重背包
- emacs 工程管理工具 ede 的帮助文档
- 【HBOI2013】ALO
- 变形的背包问题
- 背包问题的算法
- html第二天的学习
- TCP协议特点和3次握手
- POJ 1416 Shredding Company <DFS>
- Set的命令介绍与代码剖析笔记(7)
- JAVA电话簿
- JZOJ3223. 【HBOI2013】Ede的新背包问题
- s5pv210从存储设备加载代码到DDR
- C#基础巩固——成员函数(属性)的abstract、override、virtual关键字
- android 简单的音乐播放实现
- Hibernate的一级缓存
- POJ 1009--Edge Detection
- 文件批量上传--smartUpload
- bzoj2748: [HAOI2012]音量调节
- HAUTOJ 1265 Hmz 的女装