问题
为什么这个代码在,数据为1 1 0 0 4 8时,会出现给dp[负数]赋值为1。
还有为什么需要反过来算,正过来为什么会重复。
代码
#include<iostream>
using namespace std;
int n = 6, ans = 0, sum = 0;
int dp[1100], a[10] = { 0, 1, 2, 3, 5, 10, 20 }, b[200];
int main()
{
fill(dp, dp + 1100, 0);
for (int i = 1; i <= n; i++) cin >> b[i], sum += a[i] * b[i];
dp[0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = sum; j >= 0; j--) {
for (int k = 1; k <= b[i]; k++) {
if (dp[j - a[i] * k] == 1 and dp[j] == 0)
dp[j] = 1, ans++, cout <<j<< ' ' << j-a[i]*k<<endl;
}
}
}
return 0;
}