Submission #499717

#TimeUsernameProblemLanguageResultExecution timeMemory
499717Ronin13Bootfall (IZhO17_bootfall)C++14
28 / 100
629 ms5188 KiB
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define pb push_back
#define epb emplace_back
#define f first
#define s second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define inf 1e9+1
#define linf 1e18+1
using namespace std;

bool dp[101][250001];

void solve(){
    int n;cin>>n;
    int a[n+1];
    for(int i=1;i<=n;i++)cin>>a[i];
    int mx=0;
    for(int i=1;i<=n;i++){
        mx=max(mx,a[i]);
    }
    mx*=n;
    for(int i=0;i<=n;i++){
        dp[i][0]=true;
        for(int j=1;j<=n;j++){
            if(j==i)continue;
            for(int x=mx;x>=0;x--){
                if(x-a[j]>=0&&dp[i][x-a[j]])dp[i][x]=true;
            }
        }
    }
    int sum=0;
    for(int i=1;i<=n;i++)
        sum+=a[i];
    vector<int>ans;
    if(!dp[0][sum/2]){
        cout<<0;
        return;
    }
    for(int i=1;i<=sum;i++){

        bool ind=true;

        for(int j=1;j<=n;j++){
            int x=sum+i;
            x-=a[j];
            if(x&1){
                ind=false;break;
            }
            ind&=dp[j][x/2];
        }
        if(ind)ans.pb(i);
    }
    cout<<ans.size()<<"\n";
    for(int to:ans)cout<<to<<" ";
}

int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);
    int test=1;//cin>>test;
    while(test--)solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...