[动态规划] 洛谷P1064 金明的预算方案
2017-04-28 14:09
218 查看
洛谷P1064 金明的预算方案
题意:
每件物品都有一定的满意度,而且物品分主件附件,要买附件就必须要买主件,但是买主件不一定要买附件(一个主件最多有两个附件,也可能没有喔)
设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1,j2,……,jk,则所求的总和为:
v[j1]w[j1]+v[j2]*w[j2]+ …+v[jk]*w[jk]。(其中为乘号)
不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。
怎么看着有点像树形DP…
但是我们如果不区分主件附件
就是…
背包?
好吧就是一维四状态的背包
代码:
题意:
每件物品都有一定的满意度,而且物品分主件附件,要买附件就必须要买主件,但是买主件不一定要买附件(一个主件最多有两个附件,也可能没有喔)
设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1,j2,……,jk,则所求的总和为:
v[j1]w[j1]+v[j2]*w[j2]+ …+v[jk]*w[jk]。(其中为乘号)
不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。
怎么看着有点像树形DP…
但是我们如果不区分主件附件
就是…
背包?
好吧就是一维四状态的背包
代码:
#include <cstdio> #include <cstring> using namespace std; int f[32010],v[70],q[70],p[70],v1[70],q1[70],v2[70],q2[70]; int mymax(int x,int y) { return x>y?x:y; } int main() { int n,m; scanf("%d%d",&n,&m); /*q,v:如是主件则存在这里 q1,v1:如是附件一存在这里 q2,v2:如是附件二则存在这里*/ memset(f,-1,sizeof(f)); memset(q,0,sizeof(q)); memset(q1,0,sizeof(q1)); memset(q2,0,sizeof(q2)); memset(v,0,sizeof(v)); memset(v1,0,sizeof(v1)); memset(v2,0,sizeof(v2)); //请自动忽略以上的的OVO f[0]=0; for (int i=1;i<=m;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); if (c==0) { v[i]=a;q[i]=b; //存为主件 } else { if (q1[c]==0) {q1[c]=b;v1[c]=a;} else {q2[c]=b;v2[c]=a;} //存为附件一或附件二 } } for (int i=1;i<=m;i++) { for (int j=n;j>=v[i];j--) { //if(f[j]!=-1) { if (j-v[i]>=0) f[j]=mymax(f[j],f[j-v[i]]+v[i]*q[i]);//只买一个主件 if (j-v[i]-v1[i]>=0) f[j]=mymax(f[j],f[j-v[i]-v1[i]]+v[i]*q[i]+v1[i]*q1[i]);//买主件和附件一 if (j-v[i]-v2[i]>=0) f[j]=mymax(f[j],f[j-v[i]-v2[i]]+v[i]*q[i]+v2[i]*q2[i]);//买主件和附件二 if (j-v[i]-v1[i]-v2[i]>=0) f[j]=mymax(f[j],f[j-v[i]-v1[i]-v2[i]]+v[i]*q[i]+v1[i]*q1[i]+v2[i]*q2[i]);//买主件和两个附件 } } } int ans=0; for (int j=1;j<=n;j++) { if (f[j]>ans) ans=f[j]; //不一定用最多钱的就是最优的,扫一遍最大值 } printf("%d\n",ans); return 0; }
相关文章推荐
- Sicily 1346 金明的预算方案 (SOJ 1346) 【DP 动态规划-背包问题】
- 动态规划(背包问题):HRBUST 1377 金明的预算方案
- 普及练习场 动态规划的背包问题 金明的预算方案
- 洛谷P1064 金明的预算方案(DP)
- NOIP 2006 金明的预算方案|动态规划
- [动态规划]金明的预算方案
- 洛谷P1064 金明的预算方案(01背包变形)
- Vijos P1313 金明的预算方案(动态规划,有依赖的背包)
- Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划)
- 动态规划背包问题 洛谷P1064 金明的预算方案
- [NOIP2006] 提高组 洛谷P1064 金明的预算方案
- |Tyvj|NOIP2006|动态规划|P1057 金明的预算方案
- 【动态规划】Vijos P1313 金明的预算方案(NOIP2006提高组第二题)
- P1313金明的预算方案 动态规划(未解决)
- 金明的预算方案【动态规划】
- 金明的预算方案(动态规划)(有依赖的背包)
- 蓝桥杯_算法提高_金明的预算方案(动态规划、01背包变形)
- 洛谷P1064 金明的预算方案(DP,0-1背包)
- 洛谷P1064 金明的预算方案
- 洛谷OJ - P1064 - 金明的预算方案(并查集+附加条件)