采草药C语言,采药-题解(C语言代码)

### 我们直接代码分析吧!!!

```c

#includeint Max(int a, int b)

{//获取最大数

return a > b ? a : b;

}

int main()

{

int T, M;//采药总时间 药草个数

int i, j;//循环变量

int Time[101] = { 0 }; //采药所需时间

int Value[101] = { 0 };//药草价值

//二维数组

// M(1 <= M <= 100) T(1 <= T <= 1000)

//Sum_V[M][T]

int Sum_V[101][1001] = { 0 };//药草最大总价值

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

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

scanf("%d%d", &Time[i], &Value[i]);

/***************核心代码(重点)**************/

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

{//循环 M 次

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

{

if (j >= Time[i])//用上一行(i-1行)的值求本行(i行)的值

Sum_V[i][j] = Max(Sum_V[i - 1][j], Sum_V[i - 1][j - Time[i]] + Value[i]);

else//j < Time[i]时,将上一行(i-1行)的值传给下一行(i行)的数组

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

}

}

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

return 0;

}

```

### 重点分析:

这一行语句比较难以理解,这里我来重点剖析一下

Sum_V[i][j] = Max(Sum_V[i - 1][j], Sum_V[i - 1][j - Time[i]] + Value[i]);

j -----------> 的值为:Time[i]——T

j - Time[i] -> 的值为:0——T - Time[i]

当j >= Time[i]时,Sum_V[i][Time[i]——T]的值会发生变化

当j < Time[i]时, Sum_V[i][1——Time[i]-1]的值会继承上一行(i-1行)的值

通过下标分析,我们可以知道 Sum_V[i][T] 会是本行总价值最大的那一个

谢谢欣赏!!!:stuck_out_tongue_winking_eye:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值