题目
点击打开链接
这个题,是我做的第三个背包问题吧。
背包问题总是以一个变量为容器,这个题明显是天数。
做题少,所以也没见过大的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 ;
}
本文介绍了一个具体的背包问题实例,通过代码实现了解决方案。重点在于使用天数作为背包容量,并通过动态规划的方法来求解最大收益。
373

被折叠的 条评论
为什么被折叠?



