Cod sursa(job #838973)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 20 decembrie 2012 22:42:34
Problema Zebughil Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int dp[131085][20],a[20];

int main()
{
    ifstream f("zebughil.in");
    ofstream gg("zebughil.out");
    for(int t=1;t<=3;++t)
    {
        int n,g;
        memset(dp,-1,sizeof(dp));

        f>>n>>g;
        for(int i=1;i<=n;++i)
            f>>a[i];
        dp[1][1]=0;
        for(int i=0;i<(1<<n);++i)
        {
            for(int c=1; c<=n ;++c)
            {
                dp[0][c]=0;
                if(dp[i][c]!=-1)
                {
                   // cout<<"\n SUNT LA STAREA : "<<i<<endl;
                   // cout<<" Merg la starile : ";
                    for(int j=0;j<n;++j)
                    {
                        if(! (( i >> j) & 1) )
                        {
                            int next_config= ( i| 1<<j );
                           // cout<<next_config<<" ";

                            if(g>=a[j+1]+dp[i][c])
                            {
                            //    if(next_config==15)
                             //       cout<<" J :"<<1+j<<" a[j]"<<a[j+1]<<" "<<dp[i][c]<<endl;
                                dp[next_config][c]=dp[i][c]+a[j+1];
                            }
                            else
                             {
                                dp[next_config][1+c]=a[j+1];
                                 //   if(next_config==15)
                               //     cout<<" J :"<<1+j<<" a[j]"<<a[j+1]<<" "<<dp[i][c]<<endl;
                             }
                        }
                    }
                }
            }

        }
        int i;
        for(i=1;dp[(1<<n)-1][i]==-1;++i);
        gg<<i<<"\n";

    }
    return 0;
}