分组背包hdu 3033 至少选一个
来源:互联网 发布:淘宝头条织梦模板 编辑:程序博客网 时间:2024/05/23 00:06
感谢某神的提供的数据。 关键还是自己不够细心, b==0?
这题的状态转移细节很多
首先1.如何保证每组物品都至少选一个——> dp[][]置空,dp[1][0]置0.
从第k组,转移到第k+1组的时候,去掉o1背包常见的那种不选的继承状态->(dp[k+1][j]=dp[k][j])
最主要的状态方程如下
dp[k+1][j]=max(dp[k+1][j],max(dp[k][j-w[i]]+v[i],dp[k+1][j-w[i]]+v[i]) );
还是特殊判断 j-w[i] ,一般老来j -w[i] 不能为零,不然意味着之前的几组物品就 零重量贡献?不满足每组都至少选一个,例外的情况是从第0组转移的情况,以及存在重量为0的物品。
#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>#include<cmath>#include<iostream>using namespace std;typedef long long ll;const ll inf=0x3f3f3f3f;const long long maxn=10010;int K,N,W;int dp[15][maxn];int c[maxn],w[maxn],v[maxn];int main(){ //freopen("D://in.txt","r",stdin); while(scanf("%d%d%d",&N,&W,&K)!=EOF){ for(int i=1;i<=N;i++){ scanf("%d%d%d",&c[i],&w[i],&v[i]); } for(int i=0;i<=K+2;i++){ for(int j=0;j<=W;j++){ dp[i][j]=-inf; } } dp[1][0]=0; for(int k=1;k<=K;k++){ for(int i=1;i<=N;i++){ for(int j=W;j>=0;j--){ if(c[i]!=k) continue; if((j-w[i]==0&&(dp[k][j-w[i]]!=-inf ))||(j-w[i]>0) ){ if(dp[k][j-w[i]]!=-inf&&dp[k+1][j-w[i]]!=-inf){ dp[k+1][j]=max(dp[k+1][j],max(dp[k][j-w[i]]+v[i],dp[k+1][j-w[i]]+v[i]) ); }else if(dp[k+1][j-w[i]]!=-inf){ dp[k+1][j]=max(dp[k+1][j],dp[k+1][j-w[i]]+v[i]); }else if(dp[k][j-w[i]]!=-inf){ dp[k+1][j]=max(dp[k+1][j],dp[k][j-w[i]]+v[i]); }else { } } } } } int x=-inf; // printf("..%d\n",dp[2][6]); for(int i=0;i<=W;i++){ if(dp[K+1][i]>x){ x=dp[K+1][i]; } } if(x==-inf) printf("Impossible\n"); else printf("%d\n",x); } return 0;}
0 0
- 分组背包hdu 3033 至少选一个
- hdu 3033 分组背包 每组至少选一个
- 【分组背包每组至少一个】HDU 3033
- HDU 3033 I love sneakers!(分组背包/至少选一个)
- HDU 3033 I love sneakers! (分组背包 每组至少选一个)
- HDU 3033 I love sneakers! 每组最至少取一个的分组背包
- hdu 3033 I love sneakers! 分组背包之每组至少取一个
- HDU 3033 I love sneakers! 分组背包+约束限制(每组至少取一个)。
- hdu 3033 I love sneakers! (多组中至少选一个的背包)
- hdu 3033 I love sneakers! (多组背包变形-----每组至少选一个)
- hdu 3033 I love sneakers!(分组背包,每组至少取1个)
- hdu 3033 (分组背包---每组内至少取一件)
- hdu 3033 I love sneakers!(分组背包,每组至少取一件)
- hdu 3535 Are You Busy 分组背包,组内至少放一个和组内至多放一个
- hdu3033I love sneakers!【分组背包】每组至少取一个
- HDU 3033 分组背包
- HDU 3033(分组背包)
- HDU 3033 分组背包
- javascript中this的四种用法
- Spring Boot系列教程二:创建第一个web工程 hello world
- SPOJ JPIX Pixel Shuffle
- Android笔记----app应用更新
- keil如何仿真
- 分组背包hdu 3033 至少选一个
- java实现Excel压缩成Zip导出
- 遍历map集合
- python编码错误:UnicodeDecodeError: 'utf8' codec can't decode
- netty源码分析 之四 transport(ChannelPipeline)
- 常用网络模型结构LeNet,AlexNET,VGG,BN-inception,ResNet网络模型简介和资料整理--caffe学习(8)
- java web小结(一)
- JSONObject与JSONArray的使用
- 虚拟机中的Linux安装VMware Tools的方法