那您怎么枚举??(发下代码
by sunxiaohan @ 2020-10-05 21:25:56
```cpp
/*
设f[x][y]表示放前x件物品并用了y个单位的空间。
*/
#include <cstdio>
int v[105], w[105], f[105][1005];
int main() {
int t, m;
scanf("%d%d", &t, &m);
for (int i=1; i<=m; ++i)
scanf("%d%d", &v[i], &w[i]);
//枚举采药的时间
for (int i=0; i<=t; ++i) {
//枚举药的个数
for (int j=1; j<=m; ++j) {
f[j][i]=f[j-1][i]; // 0
if (i-v[j]>=0) // 1
if (f[j][i]<f[j-1][i-v[i]]+w[j])
f[j][i]=f[j-1][i-v[i]]+w[j];
}
}
printf("%d\n", f[m][t]);
return 0;
}
```
by Zlc晨鑫 @ 2020-10-05 21:29:39
@[sunxiaohan](/user/192750)
by Zlc晨鑫 @ 2020-10-05 21:29:47
@[Zlc晨鑫](/user/297555) 会访问未付值的数组
by JRzyh @ 2020-10-05 21:33:52
+1
by sunxiaohan @ 2020-10-05 21:34:34
@[Zlc晨鑫](/user/297555) 不是不可以,`i` 和 `j` 写混了
将
``` cpp
if (f[j][i]<f[j-1][i-v[i]]+w[j])
f[j][i]=f[j-1][i-v[i]]+w[j];
```
改成
``` cpp
if (f[j][i]<f[j-1][i-v[j]]+w[j])
f[j][i]=f[j-1][i-v[j]]+w[j];
```
by wsyhb @ 2020-10-05 21:35:12
您v[i]用t枚举??
by sunxiaohan @ 2020-10-05 21:35:18
for (int i=1; i<=m; ++i)
scanf("%d%d", &v[i], &w[i]);
by sunxiaohan @ 2020-10-05 21:36:00
(改了就 `AC` 了)
by wsyhb @ 2020-10-05 21:36:07
正解(但楼主问的不是这个问题吧
by sunxiaohan @ 2020-10-05 21:37:37