hdu 3535 AreYouBusy dp
来源:互联网 发布:国内餐饮软件排名 编辑:程序博客网 时间:2024/04/30 10:00
#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;const int inf =-0x7f7f7f7f;const int N =110;struct node{int cost;int val;};vector<node>g[N];int dp[N][N];int flag[N];int main(){int n,m;while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i<=n;i++){g[i].clear();fill(dp[i+1],dp[i+1]+m+1,inf);}int type,num;int r,c;for(int i=1;i<=n;i++){scanf("%d%d",&num,&type);while(num--){scanf("%d%d",&r,&c);node temp;temp.cost=r;temp.val=c;//g[type].push_back(temp);g[i].push_back(temp);flag[i]=type;}}fill(dp[0],dp[0]+m+1,0);for(int i=1;i<=n;i++){if(flag[i]==0){for(int j=0;j<=m;j++){//初始化,如果当前集合一个没选赋值为infdp[i][j]=inf;}for(int j=0;j<g[i].size();j++){node u=g[i][j];for(int h=m;h>=u.cost;h--){dp[i][h]=max(dp[i][h],dp[i][h-u.cost]+u.val);//当前组,在选当前组中的,如果当前组没选则,dp[i][h-u.cost]=inf,得到的值也是<0的。dp[i][h]=max(dp[i][h],dp[i-1][h-u.cost]+u.val);//当前组选一个}}}else if(flag[i]==1){for(int j=0;j<=m;j++){dp[i][j]=dp[i-1][j];//当前组不选}for(int j=0;j<g[i].size();j++){node u=g[i][j];for(int h=m;h>=u.cost;h--){dp[i][h]=max(dp[i][h],dp[i-1][h-u.cost]+u.val);//当前组选一个,前一组+当前选择,确保这一组只能选一个}}}else {for(int j=0;j<=m;j++){dp[i][j]=dp[i-1][j];}for(int j=0;j<g[i].size();j++){node u=g[i][j];for(int h=m;h>=u.cost;h--){dp[i][h]=max(dp[i][h],dp[i][h-u.cost]+u.val);//任意,可选可不选,可选择当前组多个}}}}if(dp[n][m]<0) printf("-1\n");else printf("%d\n",dp[n][m]);}return 0;}
就是背包,刚开始题意理解错了。。。
就是dp[i][h]的含义的问题了,dp[i][h]表示前i组h时间获得(符合条件)的最大值。。保证递推过程中的值是符合条件的就行了。。这里值为inf表示不符合条件,有不符合条件递推来的同样是不符合条件的。
0 0
- hdu 3535 AreYouBusy dp
- HDU 3535 AreYouBusy
- HDU 3535 AreYouBusy
- HDU-3535-AreYouBusy
- hdu 3535 AreYouBusy
- HDU 3535 AreYouBusy
- HDU 3535 AreYouBusy
- hdu acm 3535 AreYouBusy
- HDU 3535-AreYouBusy
- HDU 3535:AreYouBusy
- HDU 3535 AreYouBusy 综合背包
- hdu 3535 AreYouBusy(背包)
- HDU 3535 AreYouBusy(混合背包)
- hdu 3535 AreYouBusy 混合背包
- hdu 3535 AreYouBusy 混合背包
- [HDU 3535] AreYouBusy 混合背包
- HDU - 3535 AreYouBusy(混合背包)
- hdu 3535 AreYouBusy 混合背包
- Android自定义View全面总结
- 针对华为通讯模块USB设备 android、linux 上位机集成的一些经验
- Java 小程序:实现一个购物流程的功能(2)
- 并发不是并行 它更好!
- 如何用java语言实现遍历字符串中每个字符出现的次数
- hdu 3535 AreYouBusy dp
- 一个支持大数计算的类型 仅不支持除法
- emacs浏览器配置
- 插入排序
- 【OpenGL】Shader实例分析(五)- 边缘检测
- leetcode-Maximal Rectangle
- 我们仨
- 第四周作业——无向图的DFS算法
- 二分查找