hdu1712: ACboy needs your help

hdu1712: http://acm.hdu.edu.cn/showproblem.php?pid=1712
题意:输入课程数n和总天数m,再输入矩阵n*m,v[i][j]表示花费j天在课程i上得到价值为v[i][j] 解法:分组背包问题:组数为n,总容量为m,每件物品费用为c[i]=j,价值为w[i]=v[i][j] code:
#include<iostream>
#include<cstdio>
#include<cstdlib>
int max(int a,int b)
{
    if(a>b)
        return a;
    else
        return b;
}
int f[120],v[120][120];
int main()
{
    int n,m;
    while(1)
    {
        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",&v[i][j]);
            }
        }
        memset(f,0,sizeof(f));
        for(int i=1;i<=n;i++)    //枚举各组
        {
            for(int j=m;j>=0;j--)    //类似01背包
            {
                for(int k=1;k<=m;k++)      //枚举组内各物品
                {
                    if(j>=k)            //k也为费用
                    {
                        f[j]=max(f[j],f[j-k]+v[i][k]);
                    }
                }
            }
        }
        printf("%d\n",f[m]);
    }
}
/*input:
2 2
1 2
1 3
2 2
2 1
2 1
2 3
3 2 1
3 2 1
0 0
output:
3
4
6
*/

posted on 2012-07-26 11:50  acmer-jun  阅读(154)  评论(0编辑  收藏  举报

导航