G
N
I
D
A
O
L

天梯赛-正方形游戏


天梯赛-正方形游戏

#include 
#include 
#include 
#include 
using namespace std;
bool vis[10010];
int avg, n, st[10010];
bool dfs(int len, int pos, int cnt)
{
    if (cnt == 3) return true;
    for (int i = pos; i < n; i++) {
        if (vis[i] || len + st[i] > avg) continue;
        vis[i] = true;
        if (len + st[i] == avg && dfs(0, 0, cnt + 1)) return true;
        else if (len + st[i] != avg && dfs(len + st[i], i + 1, cnt)) return true;
        vis[i] = false;
    }
    return false;
}
int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        avg = 0;
        cin >> n;
        for (int i = 0; i < n; i++) cin >> st[i], avg += st[i];
        if (avg % 4 != 0) {
            cout << "No" << endl;
            continue;
        }
        avg /= 4;
        memset(vis, false, sizeof(vis));
        sort(st, st + n, greater());
        cout << (st[0] > avg || !dfs(0, 0, 0) ? "No" : "Yes ") << endl;
    }
    return 0;
}

文章作者: AnglesD
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AnglesD !
评论
 上一篇
下一篇 
天梯赛-找密码 天梯赛-找密码
密码库中存放了学校所有学生的密码,所有学生的密码都是一个“万能密码串”的子序列,所谓子序列是指从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。现在设计一个密码,要求是这个密码不是万能密码的子序列,而且长度最短。满足要求的密码有多少个?
2021-07-10