解题思路:
注意事项:
参考代码:
#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语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:500 |
小九九 (C语言代码)浏览:819 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:644 |
简单的a+b (C语言代码)浏览:717 |
【亲和数】 (C语言代码)浏览:503 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:644 |
WU-格式化数据输出 (C语言代码)浏览:1755 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:527 |
A+B for Input-Output Practice (V) (C语言代码)浏览:466 |
循环入门练习6 (C语言代码)浏览:968 |