WuJunBaBa


私信TA

用户名:TopDreamer

访问量:5682

签 名:

人生的每个阶段都需要努力。

等  级
排  名 884
经  验 3418
参赛次数 0
文章发表 13
年  龄 0
在职情况 学生
学  校 AHNU
专  业

  自我简介:

解题思路:0/1背包问题,动态规划解决

注意事项:

参考代码:

#include<iostream>

#include<string.h>

using namespace std;


#define maxn 1001

#define MAX(a,b) a>b?a:b

int profit[maxn][maxn];


int Knapsack(int *time,int *value,int T,int M)

//profit[i][j]表示前i个物品装到容量为j的背包中的最大收益 

{

for(int i=0;i <= M;i++)profit[0][i]=0;

for(int i=0;i <= M;i++)profit[i][0]=0;

for(int i=1;i <= M;i++)

{

for(int j=1;j <=T;j++)

{

if(j<time[i])

{

profit[i][j]=profit[i-1][j];

}

else

{

profit[i][j]=MAX(profit[i-1][j],profit[i-1][j-time[i]]+value[i]);

}

}

}

return profit[M][T];

}


int main() 

{

int T,M;

cin>>T>>M;

int *time = new int[M+1];

int *value = new int[M+1];

for(int i=1;i <= M;i++)cin>>time[i]>>value[i];

cout<<Knapsack(time,value,T,M)<<endl;

delete[] time;

delete[] value;

return 0;

}  


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区