http://acm.hdu.edu.cn/showproblem.php?pid=1712

赤裸裸的分组背包

View Code
#include <iostream>
using namespace std ;
int dp[101] ;
int val[101][101] ;
int main()
{
    int n,m ;
    while(scanf("%d%d",&n,&m),(n||m))
    {
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%d",&val[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<=j;k++)//这里注意不能超过背包上限 
                        dp[j]=max(dp[j],dp[j-k]+val[i][k]) ;
        printf("%d\n",dp[m]) ;
    } 
    return 0 ;
}