Cod sursa(job #3174573)

Utilizator Manolea_Teodor_StefanManolea Teodor Stefan Manolea_Teodor_Stefan Data 24 noiembrie 2023 22:17:01
Problema Zebughil Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");

struct cv
{
    long long cnt;
    long long weight;
};

int n;
long long weight, i, k;
long long arr[17];
cv dp[1<<17];
int main()
{
    fin>>n>>weight;
    for(int ij = 1; ij <= 3; ij++)
    {
        fin>>n>>weight;
        for(i=0; i < n; i++)
            fin>>arr[i];
        for(i = 1; i < (1<<n); i++)
            dp[i].cnt=n+1,
                  dp[i].weight=0;

        dp[0].cnt=1;
        dp[0].weight=0;

        for(k = 1; k < (1<<n); k++)
            for(i=0; i < n; i++)
                if( k & (1<<i)  )
                {
                    int j = k - (1<<i);
                    if(dp[j].weight + arr[i] <= weight)
                    {
                        if(dp[j].cnt < dp[k].cnt
                                ||(dp[j].cnt == dp[k].cnt
                                   && dp[j].weight + arr[i] < dp[k].weight))
                        {
                            dp[k].cnt = dp[j].cnt;
                            dp[k].weight = dp[j].weight + arr[i];
                        }
                    }
                    else if(dp[j].cnt + 1 < dp[k].cnt
                            ||(dp[j].cnt + 1 == dp[k].cnt
                               && arr[i] < dp[k].weight))
                    {
                        dp[k].cnt = dp[j].cnt + 1;
                        dp[k].weight = arr[i];
                    }
                }
        fout<<dp[(1<<n)-1].cnt<<'\n';
    }


    return 0;
}