Cod sursa(job #3173258)

Utilizator Dia3141Costea Diana Stefania Dia3141 Data 22 noiembrie 2023 11:00:44
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
using namespace std;
ifstream  cin("zebughil.in");
ofstream cout("zebughil.out");
int n,i,j,p;
long long g,v[20],dp[(1<<18)][3];
void rezolvare(){
    cin>>n>>g;
    for(i=0;i<n;i++)
        cin>>v[i];
    for(i=1;i<(1<<n);i++){
        dp[i][1]=n+1;// dp[i][1] = nr drumuri folosind i pachete
        dp[i][2]=0;// dp[i][2] = greutatea a i pachete
    }
    dp[0][1]=1;
    dp[0][2]=0;
    for(i=1;i<(1<<n);i++)
        for(p=0;p<n;p++)
            if(i&(1<<p)){
                int j=i-(1<<p);
                if(dp[j][2]+v[p]<=g){
                    if(dp[j][1]<dp[i][1]||(dp[j][1]==dp[i][1]&&dp[j][2]+v[p]<dp[i][2])){
                        dp[i][1]=dp[j][1];
                        dp[i][2]=dp[j][2]+v[p];
                    }
                }else   if(dp[j][1]+1<dp[i][1]||(dp[j][1]+1==dp[i][1]&&v[p]<dp[i][2])){
                            dp[i][1]=dp[j][1]+1;
                            dp[i][2]=v[p];
                        }
            }
    cout<<dp[(1<<n)-1][1]<<'\n';
}
int main()
{
    for(int w=1;w<=3;w++)
        rezolvare();
    return 0;
}