有没有神犇帮我看一下这个站外题哪里错了?
  • 板块学术版
  • 楼主_wangleting123_
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/7/20 11:12
  • 上次更新2023/11/3 08:42:09
查看原帖
有没有神犇帮我看一下这个站外题哪里错了?
1040559
_wangleting123_楼主2023/7/20 11:12
#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

2023/7/20 11:12
加载中...