#D. 砝码称重加强版(famax)
传统题
1000ms
256MiB
问题描述:
桐桐有n种不同的砝码,每种砝码分别有x1 x2 x3 ……xn个,每种砝码单个的重量分别是y1 y2 y3 ……yn克。她想知道用这些砝码能称出多少种不同的质量。
输入描述:
第1行1个整数n(n<=10);
第2行共n个数,分别为x1 x2 x3 ……xn,表示n类砝码每一类的数量,xi<=20;
第3行共n个数,分别为y1 y2 y3 ……yn,表示n类砝码单个的重量, yi<=20;
输出描述:
只有一个数,表示用这些砝码能称出不同质量有多少种,但不包括一个砝码也不用的情况。
输入样例:
2
1 1
1 2
输出样例:
3
样例说明:
1克的1个,质量为1;
2克的1个,质量为2;
1克的1个加2克的1个,质量为3;
总共可以称出1g,2g,3g三种不同的质量。
#include <bits/stdc++.h>
using namespace std;
bool f[400001];
int n, a[101], b[101];
int main() {
cin >> n;
int max = 0;
for (int i = 1; i <= n; i ++) {
cin>>a[i]>>b[i];
max = a[i] * b[i];
}
memset (f, 0, sizeof(f));
f[0] = 1;
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= a[i]; j ++) {
for (int k = 400000; k >= 0; k --) {
if (f[k] == 1 && k + b[i] <= 400000) {
f[k + b[i]] = 1;
}
}
}
}
int ans = 0;
for (int i = 1; i <= 400000; i ++) {
if (f[i] == 1) {
ans ++;
}
}
cout<<ans;
return 0;
}
样例过了,但5个测试点全部报WA