Cod sursa(job #1723943)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 1 iulie 2016 21:17:42
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<cstdio>
#define MAXN 20
#define MAXEXP 140010
using namespace std;
int v[MAXN];
int dp[MAXN][MAXEXP];
int maximum(int a,int b){
    if(a<b)
        return b;
    return a;
}
int main(){
    freopen("zebughil.in","r",stdin);
    freopen("zebughil.out","w",stdout);
    int test,n,g,i,j,k;
    for(test=1;test<=3;test++){
        scanf("%d%d",&n,&g);
        for(i=0;i<n;i++)
            scanf("%d",&v[i]);
        for(i=0;i<=n;i++)
            for(j=1;j<(1<<n);j++)
                dp[i][j]=-1;
        for(k=1;k<=n;k++)
            for(i=1;i<(1<<n);i++)
                for(j=0;j<n;j++)
                    if(i&(1<<j))
                        if(dp[k-1][i^(1<<j)]!=-1)
                            dp[k][i]=maximum(dp[k][i],g-v[j]);
                        else
                            if(dp[k][i^(1<<j)]>=v[j])
                                dp[k][i]=maximum(dp[k][i],dp[k][i^(1<<j)]-v[j]);
        k=1;
        i=(1<<n)-1;
        while(dp[k][i]==-1)
            k++;
        printf("%d\n",k);
    }
    return 0;
}