- 知识:分组背包是01背包的一种变形。分组背包中物品被分成几组,每组中只能挑选出一件物品加入背包,
- 这是与01背包的区别。 在01背包中,我们以每一件物品作为动态规划的每一阶段,
- 但是在分组背包中我们要以每一组作为每一阶段。 先枚举每一组,再枚举体积,最后枚举每组中的物品。
- for(int i=1;i<=k;i++)
- for(int c=v;c>=0;c--)
- for( each 物品j in 第i组 )
- if(c>=w[i])
- f[c]=max(f[c],f[c-w[j]+v[j]]);
-
ACboy needs your help
HDU - 1712 - 题意:有n门课程,和m天时间,完成a[i][j]得到的价值为第i行j列的数字,求最大价值.就是第n门课程,
- 可以做一天,可以做两天,但它们相斥,你做了一天,就不能再做一天...也就是不能再做这门课程了
-
#include<bits/stdc++.h> using namespace std; #define maxn 178 int dp[maxn],n,m; int a[maxn][maxn]; int main() { while(~scanf("%d%d",&n,&m)) { if(n==0&&m==0)break; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) scanf("%d",&a[i][j]); memset(dp,0,sizeof(dp)); for(int i=1; i<=n; i++) for(int j=m; j>=1; j--) for(int k=1; k<=m; k++) if(j-k>=0&&dp[j]<dp[j-k]+a[i][k]) dp[j]=dp[j-k]+a[i][k]; printf("%d\n",dp[m]); } return 0; }
ACboy needs your help HDU - 分组背包
最新推荐文章于 2021-08-06 19:31:49 发布