求助,T了一个点,WA了两个点
查看原帖
求助,T了一个点,WA了两个点
340333
dengyunsheng楼主2020/9/25 21:28

****这里是代码


#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 70;

int n;
int w[N];
int sum, length;
bool st[N];

bool dfs(int u, int cur, int start)
{
    if (u * length == sum) return true;
    if (cur == length) return dfs(u + 1, 0, 0);

    for (int i = start; i < n; i ++ )
    {
        if (st[i] || cur + w[i] > length) continue;

        st[i] = true;
        if (dfs(u, cur + w[i], i + 1)) return true;
        st[i] = false;

       if (!cur || cur + w[i] == length) return false;

        int j = i;
        while (j < n && w[j] == w[i]) j ++ ;
        i = j - 1;
    }

    return false;
}

int main()
{
        int pos = 0;
        cin>>n;
        memset(st, 0, sizeof st);
        sum = 0;

        for (int i = 0; i < n; i ++ )
        {
            cin >> w[i];
            if(w[i]>50) continue;
            sum += w[i];
        }

        sort(w, w + n);
        reverse(w, w + n);
        for(int i = 0 ; i < n;i++)
            if(w[i]>50) pos = i;
            else break;
        pos++;
        length = 1;
        while (true)
        {
            if (sum % length == 0 && dfs(0, 0, pos))
            {
                cout << length << endl;
                break;
            }
            length ++ ;
            //if(length>=50) break;
        }
    return 0;
}
2020/9/25 21:28
加载中...