hdu1712分组背包(每组最多选1个)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1712分组背包(每组最多选1个)相关的知识,希望对你有一定的参考价值。
【分组背包】
【题意】ACboy要开始选课了,上一门课能够获得的收益和他上这门课的时间是有关的,然后给你若干门课,让你帮他进行选课,
每一门课自然是只能选择一个课程时长,问你如何选择,才能使ACboy获得的受益最大。
for(k=1;k<=K;k++)
for(int v=V;v>=0;v--)
for(int i=item in group k)
f[v]=max(f[v],f[v-c[i]+w[i]);
保证用到的都是k-1所更新的而不是k所更新的。
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<algorithm>
6 #include<queue>
7 #include<vector>
8 using namespace std;
9
10 const int N=110;
11 int n,m,a[N][N],f[N];
12
13 int maxx(int x,int y){return x>y ? x:y;}
14
15 int main()
16 {
17 freopen("a.in","r",stdin);
18 while(1)
19 {
20 scanf("%d%d",&n,&m);
21 if(!n && !m) return 0;
22 for(int i=1;i<=n;i++)
23 for(int j=1;j<=m;j++)
24 {
25 scanf("%d",&a[i][j]);
26 }
27 memset(f,0,sizeof(f));
28 for(int i=1;i<=n;i++)
29 for(int j=m;j>=1;j--)
30 for(int k=1;k<=j;k++)
31 {
32 f[j]=maxx(f[j],f[j-k]+a[i][k]);
33 }
34 printf("%d\\n",f[m]);
35 }
36 return 0;
37 }
以上是关于hdu1712分组背包(每组最多选1个)的主要内容,如果未能解决你的问题,请参考以下文章
HDU 1712 ACboy needs your help(分组背包入门题)