解题思路:01背包+动态规划  思想可以网上找

注意事项:

参考代码:

#include <stdio.h>

int max(int a,int b);

int main()

{

int T,M,i,j;

int herbt[101];//存储采每种草药所需的时间 

int herbv[101];//存储每种草药的价值 

int m[101][1001];//动态存储最大价值矩阵 

scanf("%d%d",&T,&M);

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

{

scanf("%d%d",&herbt[i],&herbv[i]);

}

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

{

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

{

if(j>=herbt[i])

m[i][j]=max(m[i-1][j],(m[i-1][j-herbt[i]]+herbv[i]));

else

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

}

}

//面对第i种草药,有时间j(不是剩余时间j)的时候,是采还是不采?如果j<herbt[i](采这种草药需要的时间),肯定采不了,m[i][j]=m[i-1][j]; 如果j>=herbt[i],就要看采了它是否会带来更大的价值,

// 把herbt[i]的时间腾出来,看采了i之后的价值 m[i-1][j-herbt[i]]+herbv[i]和之前的 m[i-1][j]谁大,选更大的赋值给m[i][j] 

printf("%d\n",m[M][T]);

return 0;

}


int max(int a,int b)

{

if(a>=b)

return a;

else

return b;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论