HDU3033 I love sneakers!(分组背包)
来源:互联网 发布:一键瞬狙软件 编辑:程序博客网 时间:2024/06/06 04:09
至少选一个的分组背包。
0下标外均初始化为-1。那么对于每组第j个,首先将其与本组比较,有dp[i][l] = max(dp[i][l], dp[i][l-w[j]] + v[j]),因为是初始化为-1,所以这一过程一定是必选的。
然后再与i-1组的比较,更新的才是前i组的最优值。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;int n,m,k,t,v[105],p[105],dp[105][10005],flag;vector<int> b[15];int max(int a,int b,int c){ return a>b?a>c?a:c:b>c?b:c;}int main(){freopen("/Users/apple/input.txt","r",stdin);freopen("/Users/apple/out.txt","w",stdout); while(scanf("%d%d%d",&n,&m,&k)!=EOF){ flag=0; memset(dp,-1,sizeof(dp)); for(int i=0;i<=m;i++)dp[0][i]=0; for(int i=1;i<=n;i++) { scanf("%d%d%d",&t,&p[i],&v[i]); b[t].push_back(i); } for(int i=1;i<=k;i++){ int len=b[i].size(); for(int j=0;j<len;j++){ t=b[i][j]; for(int l=m;l>=p[t];l--){ dp[i][l]=max(dp[i][l],dp[i][l-p[t]]+v[t],dp[i-1][l-p[t]]+v[t]); } } } if(dp[k][m]<0)puts("Impossible"); else printf("%d\n",dp[k][m]); } return 0;}
0 0
- (分组背包)I love sneakers!(hdu3033)
- HDU3033 I love sneakers!(分组背包)
- HDU3033 I love sneakers!(分组背包)
- 分组背包 hdu3033 I love sneakers!
- I love sneakers!(分组背包HDU3033)
- hdu3033 I love sneakers! (分组背包)
- 【分组背包变形】HDU3033-I love sneakers!
- hdu3033---I love sneakers!(分组背包变形)
- hdu3033 I love sneakers!
- 【HDU3033】【I love sneakers!】
- I love sneakers!(分组背包变形)
- I love sneakers! (分组背包)
- 动态规划--至少取一个的分组背包--hdu3033 I love sneakers!
- hdu3033 I love sneakers! (背包问题变形 每种至少买一个)
- hdu 3033 I love sneakers!(分组背包)(微水)
- HDU 3033 I love sneakers!(分组背包变形)
- HDOJ 3033 I love sneakers! (分组背包)
- hdu 3033 I love sneakers!(分组背包)
- cannot assign to self outside of a method in the init family
- 将char*转换为wchar_t*
- PowerDesigner中Table视图同时显示Code和Name
- c++必须在类初始化列表中初始化的几种情况
- android View 自动 GONE 问题
- HDU3033 I love sneakers!(分组背包)
- table中td与td显示细线
- Ubuntu安装mysql和简单操作
- scrapy KeyError: 'Spider not found: doubanmovie' FAQ
- MySQL 常用命令
- TabLayout+Fragment android design
- 头文件为什么要加#ifndef #define #endif
- 基于openwrt和s3c2440的无线ap实现
- Ubuntu安装配置Mysql