https://codeforces.com/problemset/problem/417/A 做此题的时候,出现了奇怪的问题,编译选项是 GNU G++14,出错数据在本地明明是对的,本地:visual studio,另外在学校的 OJ 平台上测了如果开 O2 就会出问题,但是经过检查似乎也没出现下标越界,但是将数据范围扩大就不会有问题了
#include <iostream>
#include <cstring>
using namespace std;
const int N = 10005;
int f[N];
int v[3], w[3];
int c, d, n, m, k;
int main()
{
memset(f, 0x3f, sizeof f);
f[0] = 0;
cin >> c >> d;
cin >> n >> m;
cin >> k;
v[1] = n; v[2] = 1;
w[1] = c; w[2] = d;
int num = n * m - k; //minimum number of people go to the final
for (int i = 1; i <= 2; i++)
{
for (int j = 1; j <= v[i]; j++) f[j] = min(f[j], w[i]);
for (int j = v[i] + 1; j <= num; j++) f[j] = min(f[j], f[j - v[i]] + w[i]);
}
cout << f[num];
return 0;
}
此为问题代码,如果将 v 和 w 改成 N 的话就可以 AC,但是如你所见下标最多到 2,哪怕是开到 5 也还是会有问题,不知道为什么