Cod sursa(job #3365836)

Utilizator novak1snovac luca novak1s Data 26 septembrie 2026 12:59:12
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <bits/stdc++.h>
using namespace std;
#define int long long
int v[23];
pair<int,int>dp[(1<<18)];
signed main(){
    ifstream cin("zebughil.in");
    ofstream cout("zebughil.out");
    for(int r=1;r<=3;r++){
        int n,g;
        cin >> n >> g;
        for(int i=1;i<(1<<n);i++){
            dp[i]={1e9,1e9};
        }
        for(int i=0;i<n;i++){
            cin >>v[i];
            dp[1<<i]={1,v[i]};
        }
        for(int i=1;i<(1<<n);i++){
            if(dp[i].first==1e9){
                for(int j=0;j<n;j++){
                    if(i&(1<<j)){
                        int ceva=i-(1<<j);
                        if(dp[ceva].second+v[j]<=g){
                            if(dp[ceva].first<dp[i].first)
                            {
                            dp[i].first=dp[ceva].first;
                            dp[i].second=dp[ceva].second+v[j];
                            }
                            else if(dp[ceva].first==dp[i].first){
                                if(dp[ceva].second+v[j]<dp[i].second){
                                    dp[i].second=dp[ceva].second+v[j];
                                }
                            }
                        }
                        else{
                            if(dp[ceva].first+1<=dp[i].first){
                                dp[i].first=dp[ceva].first+1;
                                dp[i].second=min(dp[i].second,v[j]);
                            }
                        }
                    }
                }
            }
        }
        cout << dp[(1<<n)-1].first << '\n';
    }
    return 0;
}