WuJunBaBa


私信TA

用户名:TopDreamer

访问量:5645

签 名:

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

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

  自我简介:

解题思路:

注意事项:

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#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[i][0]=0;
 for(int i=0;i <= T;i++)profit[0][i]=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;//T代表总共用来采药的时间,M表示草药的数量
 scanf("%d %d",&T,&M);
 int *time = (int*)malloc(sizeof(int)*(M+1));
 int *value = (int*)malloc(sizeof(int)*(M+1));
 for(int i=1;i <= M;i++)scanf("%d %d",&time[i],&value[i]);
 printf("%d\n",Knapsack(time,value,T,M));
 free(value);
 free(time);
 return 0;



 

0.0分

0 人评分

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

编程语言转换

万能编程问答

代码解释器

  评论区