hdu1712 分组背包(每组最多只选一个)

题意:

用m天的时间来学n门课程,给出n和m和一个num[n][m]的矩阵,num[n][m] 代表的是花m天的时间学习第n门课程所获得的价值,求最多能获得多大的价值

#include <iostream>

#include <cstdio>

#include <vector>

#include <cstring>

using namespace std;

const int Ni = 120;

int dp[Ni][Ni];

int d[Ni][Ni];

int main()

{

    int n,m,i,j,k;

    while(scanf("%d%d",&n,&m),n+m)

    {

        for(i=1;i<=n;i++)

        {

           for(j=1;j<=m;j++)

           {

               scanf("%d",&d[i][j]);

           }

        }

        memset(dp,0,sizeof(dp));

        for(i=1;i<=n;i++)

        {

            for(j=1;j<=m;j++)

            {

                for(k=m;k>=j;k--)

                {

                    dp[i][k]=max(dp[i][k],dp[i-1][k]);

                    dp[i][k]=max(dp[i][k],dp[i-1][k-j]+d[i][j]);

                }

            }

        }

        printf("%d\n",dp[n][m]);

    }

    return 0;

}

你可能感兴趣的:(HDU)