原题链接:采药
解题思路:
注意事项:
参考代码:
#include <stdio.h> #define max(x,y) x>y?x:y//取最大值 int time[101] = { 0 };//采药时间 int value[101] = { 0 };//药材价值 int dp[101][1001] = { 0 };//动态规划—dp[i][j]==>>在j时间下,1-i药草中,采的药草的最大价值 //当i=0或j=0时,药材价值为0==>>dp[0][j]={0},dp[i][0]={0} int main() { int T = 0, M = 0; scanf("%d%d", &T, &M); for (int i = 1; i <=M; i++) { scanf("%d%d", &time[i], &value[i]); } for (int i = 1; i <= M; i++) { for (int j = 1; j <= T; j++) { //当拥有时间比要采的药材所用时间短时 //则1--i药材在j时间内采得的最大价值等于1--i-1药材在j时间内采得的最大价值 if (j < time[i]) { dp[i][j] = dp[i - 1][j]; } //当拥有时间足够采i药材时,则有两种选择采i或不采i //1、采i:则1--i药材在j时间内采得的最大价值等于1--i-1药材在(j-采i所用的时间)的时间内采得的最大价值+i的价值 //2、不采i:则1--i药材在j时间内采得的最大价值等于1--i-1药材在j时间内采得的最大价值 //3、取两种情况的较大值 else { dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - time[i]] + value[i]); } } } printf("%d", dp[M][T]);//打印1--M株草药在T时间内采的最大价值 return 0; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复