为何枚举的顺序不能反过来?

P1048 [NOIP2005 普及组] 采药

那您怎么枚举??(发下代码
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


| 下一页