Hack it!
  • 板块P1537 弹珠
  • 楼主Final_
  • 当前回复12
  • 已保存回复12
  • 发布时间2022/8/4 07:42
  • 上次更新2023/10/27 17:08:07
查看原帖
Hack it!
621762
Final_楼主2022/8/4 07:42

sample input:

20000 20000 20000 20000 30000 20000   
0 0 0 0 0 0

sample output:

Collection #1:
Can't be divided.

我大号的代码(AC):

#include <bits/stdc++.h>

using namespace std;

int dp[2323233], w[2322333];

signed main() {
    int a, b, c, d, e, f, ca = 1;
    while (cin >> a >> b >> c >> d >> e >> f, a || b || c || d || e || f) {
        int cnt = 0;
        for (int i = 1; i <= a; i ++)
            w[++ cnt] = 1;
        for (int i = 1; i <= b; i ++)
            w[++ cnt] = 2;
        for (int i = 1; i <= c; i ++)
            w[++ cnt] = 3;
        for (int i = 1; i <= d; i ++)
            w[++ cnt] = 4;
        for (int i = 1; i <= e; i ++)
            w[++ cnt] = 5;
        for (int i = 1; i <= f; i ++)
            w[++ cnt] = 6;
        int sum = 1 * a + 2 * b + 3 * c + 4 * d + 5 * e + 6 * f;
        for (int i = 0; i <= sum; i ++) 
            dp[i] = 0;
        dp[0] = 1;
        for (int i = 1; i <= cnt; i ++)
            for (int j = sum; j; j --)
                if (j - w[i] >= 0)
                    if (dp[j - w[i]])
                        dp[j] = 1;
        bool flag = false;
        for (int i = 0; i <= sum; i ++)
            if (dp[i]) {
                int ans = 2 * i - sum;
                if (ans == 0) {
                    flag = true;
                    break;
                }
            }
        cout << "Collection #" << ca ++ << ":\n";
        if (flag)
            cout << "Can be divided.\n\n";
        else
            cout << "Can't be divided.\n\n";
    }
    return 0;
}

好多题解都TLE了。

O(n2)O(n^2) 在元数据下可过,这组数据Hack TLE

2022/8/4 07:42
加载中...