文章
9
粉丝
289
获赞
4
访问
82.3k
#include <stdio.h>
#include <stdlib.h>
//定义药的数据结构
typedef struct drug
{
int time; //采药所需时间
int cost; //药的价值
}drug;
//求两个数的较大值
int max(int a, int b)
{
return a>b?a:b;
}
//定义药的数组
drug drugs[101];
//定义价值数组,可以看成一个表格,纵表示第i种药,横表示共有的采药时间j
short value[101][1001];
int main()
{
//输入
int t, m;//t代表总共能够用来采药的时间,m代表山洞里的草药的数目
scanf("%d %d", &t, &m);
for(int i=1; i<=m; i++)
{
scanf("%d%d", &drugs[i].time, &drugs[i].cost);
}
//构建动态规划的二维数组
for(int i=1; i<=m; i++)
{
for(int j = 0; j <= t; j++)
{
if(j < drugs[i].time)//当总的采药时间比采i药所需时间小,则该药采不了,所以时间不变
value[i][j] = value[i-1][j];
else//当总的采药时间比采i药所需时间大,则该药足够时间采,比较采该药后的价值与不采该药的价值大小
value[i][j] = max(value[i-1][j], value[i-1][j-drugs[i].time] + drugs[i].cost);
...
登录后发布评论
暂无评论,来抢沙发