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(分组背包入门题)

hdu3033分组背包(每组最少选一个)

分组背包模板题 hdu1712

5.分组背包问题

hdu3033 I love sneakers! 分组背包变形(详解)

P1757 通天之分组背包 / hdu1712 ACboy needs your help (分组背包入门)