砝码秤重
Description
设有n种砝码,第k种砝码有Ck个,每个重量均为Wk,求:用这些砝码能秤出的不同重量的个数,但不包括一个砝码也不用的情况。
Input
输入的第一行只有一个数n,表示不同的砝码的种类数. 第2行至第n+1行,每行有两个整数.第k+1行的两个数分别表示第k种砝码的个数和重量.
Output
输出中只有一行数据:Total=N。表示用这些砝码能秤出的不同重量数。
Sample Input
2
2 2
2 3
Sample Output
Total=8
HINT
对于100%的数据,砝码的种类n满足:1≤n≤100;
对于30%的数据,砝码的总数量C满足:1≤C≤20;
对于100%的数据,砝码的总数量C满足:1≤C≤100;
对于所有的数据,砝码的总重量W满足:1≤W≤400000;
Source
#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 ++) {
scanf("%d %d", &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 ++;
}
}
printf("Total=%d", ans);
return 0;
}
/**************************************************************
Problem: 1604
User: LJA001162
Language: C++
Result: 正确
Time:84 ms
Memory:1928 kb
****************************************************************/