您的位置:首页 > 其它

hdu 1712 ACboy needs your help(很裸的分组背包,照着背包九讲套)

2012-04-27 22:35 337 查看
题目分析:有n门课程,A[i][j]表示第i们课程,用j天完成,可以得到的价值,用m天可以得到的最大价值;

把每一行当做一组物品,时间耗时当做体积,m天当做容量,

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712

#include<iostream>
#include<cstdio>
using namespace std;
int dp[10000],A[110][110];
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&A[i][j]);
memset(dp,0,sizeof(dp));
for(int k=1;k<=n;k++)//每一组
for(int j=m;j>=0;j--)//代价
for(int i=1;i<=m;i++)
if(j-i>=0)
dp[j]=max(dp[j],dp[j-i]+A[k][i]);
printf("%d\n",dp[m]);
}
system("pause");
return 0;
}


另一种:

#include<iostream>
#include<cstdio>
using namespace std;
int dp[10000],A[110][110];
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&A[i][j]);
memset(dp,0,sizeof(dp));
for(int k=1;k<=n;k++)//每一组
for(int j=m;j>=0;j--)//代价
for(int i=1;i<=j;i++)
dp[j]=max(dp[j],dp[j-i]+A[k][i]);
printf("%d\n",dp[m]);
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: