Cod sursa(job #2583722)

Utilizator barbuionBarbu Ion barbuion Data 18 martie 2020 14:34:45
Problema Zebughil Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#define inf 10000000
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int n,t,G,dp[2][100001],i,j,v[20];
int main()
{
    for(t=1;t<=3;t++){
        fin>>n>>G;
        for(i=1;i<=n;i++)
            fin>>v[i];
        for(i=1;i<=(1<<n)-1;i++)
             dp[0][i]=dp[1][i]=inf;
        dp[0][0]=0;
        dp[1][0]=1;
        int nmax=(1<<n)-1;
        for(i=1;i<=nmax;i++){
            for(j=0;(1<<j)<=i;j++)
                if(((i>>j)&1)==1)
                   if(dp[0][i-(1<<j)]+v[j+1]<=G){
                    if(dp[1][i]>dp[1][i-(1<<j)]||(dp[1][i]==dp[1][i-(1<<j)]&&dp[0][i]>dp[0][i-(1<<j)]+v[j+1])){
                        dp[0][i]=dp[0][i-(1<<j)]+v[j+1];
                        dp[1][i]=dp[1][i-(1<<j)];
                    }
                   }
                  else
                  if(dp[1][i]>dp[1][i-(1<<j)]+1||(dp[1][i]==dp[1][i-(1<<j)]+1&&dp[0][i]>v[j+1]))
                  {
                      dp[0][i]=v[j+1];
                      dp[1][i]=dp[1][i-(1<<j)]+1;
                  }

                  }
             fout<<dp[1][nmax]<<'\n';

        }


    return 0;
}