hdu1712(分组背包)

来源:互联网 发布:兄弟连python视频下载 编辑:程序博客网 时间:2024/05/29 17:39

链接:点击打开链接

题意:A[i][j]表示用j天学习第i个课程能够得到A[i][j]的收益,求m天内获得的收益最大值,一天只能上一节课

代码:

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;int dp[105],a[105][105];int main(){                                     //分组背包    int n,m,i,j,k;    while(scanf("%d%d",&n,&m)!=EOF&&(n||m)){        memset(dp,0,sizeof(dp));        for(i=0;i<n;i++)        for(j=0;j<m;j++)        scanf("%d",&a[i][j]);        for(i=0;i<n;i++)        for(j=m;j>=0;j--)        for(k=0;k<j;k++)                        //这三个循环的顺序决定了不会取同一组的物品        dp[j]=max(dp[j],dp[j-k-1]+a[i][k]);        printf("%d\n",dp[m]);    }    return 0;}


 

0 0
原创粉丝点击