Cod sursa(job #3365836)
| Utilizator | 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;
}
