题目
点击打开链接
这个题,是我做的第三个背包问题吧。
背包问题总是以一个变量为容器,这个题明显是天数。
做题少,所以也没见过大的01背包问题。一开始想把数据存成更基础的形式,但是发现天数有前后关系。
于是只能硬写。
代码如下,简单易懂
#include <iostream>
#include <iomanip>
#include<queue>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip>
#include<string.h>
#include<sstream>
#include<string>
#include<queue>
#define MAX 5842
//¶¨Ò庯Êý¶Î
#define repf(i,a,b) for(int i =(a);i<(b);i++)
#define repfe(i,a,b) for(int i =(a);i<=(b);i++)
using namespace std;
int profit[111][111];
int dp[150];
int main() {
int courses, days;
while(cin>>courses&&cin>>days)
{
if(courses==0&&days==0)
{
break ;
}
repfe(i,1,courses)
{
repfe(j,1,days)
{
cin>>profit[i][j];
}
}
memset(dp,0,sizeof(dp));
repfe(i,1,courses)
{
for(int j =days ; j>0 ; j--)
{
for(int k =1 ; k <=j;k++)
dp[j] = max(dp[j],dp[j-k]+profit[i][k]);
//cout <<"item:"<< j<<" "<<dp[j]<<" dp[days-j]"<< dp[days-j]<< " profit:"<<profit[i][j]<<endl;
}
}
cout << dp[days]<<endl;
}
return 0 ;
}