HLG 1377 金明的预算方案[有依赖的背包]
2012-05-02 20:17
429 查看
题意: 有 n 个物品,有主件附件之分,买附件必须先买主件,问最后可以得到的价值最大是多少?
分析: 分组背包的变形。
View Code
分析: 分组背包的变形。
View Code
#include<stdio.h> #include<string.h> #define max(a,b)(a)>(b)?(a):(b) int w[100]; struct node { int to,next; }q[100]; int head[61]; int num[61]; int tot; void add(int s,int u) { q[tot].to=u; q[tot].next=head[s]; head[s]=tot++; } int main() { int f[32002]; int a[500],b[500]; int c[500]; int top,i,j,k,fu,n,z,v,x,y,wi,a_tmp,b_tmp; while(scanf("%d%d",&v,&n)!=EOF) { memset(head,0,sizeof(head)); memset(num,0,sizeof(num)); tot=1; for(i=1;i<=n;i++) { scanf("%d%d%d",&wi,&x,&y); num[y]++; c[i]=wi; w[i]=wi*x; add(y,i); } for(i=0;i<=v;i++) f[i]=0; for(i=head[0];i;i=q[i].next) { top=0; k=q[i].to; a[top]=w[k]; b[top++]=c[k]; a_tmp=b_tmp=0; for(j=head[k];j;j=q[j].next) { fu=q[j].to; a[top]=w[k]+w[fu]; b[top++]=c[k]+c[fu]; a_tmp+=w[fu]; b_tmp+=c[fu]; } if(num[k]==2) { a[top]=w[k]+a_tmp; b[top++]=c[k]+b_tmp; } for(j=v;j>=0;j--) for(z=0;z<top;z++) if(j>=b[z]) f[j]=f[j]>f[j-b[z]]+a[z]?f[j]:f[j-b[z]]+a[z]; } printf("%d\n",f[v]); } return 0; }
相关文章推荐
- 蓝桥杯 算法提高 金明的预算方案 有依赖的背包问题
- 洛谷 P1064 金明的预算方案 依赖背包
- 算法提高 金明的预算方案 有依赖的背包问题
- 第七讲 有依赖的背包问题 vijos P1313金明的预算方案
- 依赖背包dp NOIP2006 vijos 1313 金明的预算方案
- 有依赖的背包问题——金明的预算方案
- noip2006 金明的预算方案 (有依赖的背包转化为01背包)
- 金明的预算方案(动态规划)(有依赖的背包)
- WUSTOJ 1878 金明的预算方案(有依赖的背包/树形DP)
- RQNOJ 金明的预算方案(依赖背包)
- 蓝桥杯 金明的预算方案 有依赖的背包
- sicily 1346 金明的预算方案 有依赖的背包问题
- 动态规划(背包问题):HRBUST 1377 金明的预算方案
- 洛谷P1064 金明的预算方案(有依赖的背包问题)
- 算法提高 金明的预算方案 有依赖的背包
- NOIP2006金明的预算方案[DP 有依赖的背包问题]
- 金明的预算方案 有依赖的背包
- Vijos P1313 金明的预算方案(动态规划,有依赖的背包)
- 树形依赖背包(codevs1155 金明的预算方案 2006年NOIP全国联赛提高组)
- 金明的预算方案 有依赖的背包