Pagini recente » Cod sursa (job #2029342) | Cod sursa (job #527239) | Cod sursa (job #2270880) | Monitorul de evaluare | Cod sursa (job #3217851)
#include <bits/stdc++.h>
#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
///#include <tryhardmode>
///#include <GODMODE::ON>
using namespace std;
ifstream fin ("zebughil.in");
ofstream fout ("zebughil.out");
const int MASK=20;
struct elem{
int value;
int weight;
}dp[1<<MASK];
int v[MASK];
void solve()
{
int n,g,mask,i,j;
fin>>n>>g;
for(i=1;i<=n;i++)
fin>>v[i];
for(mask=1;mask<(1<<n);mask++)
{
dp[mask].value=n+1;
dp[mask].weight=0;
for(i=0;i<n;i++)
{
if(mask & (1<<i))
{
elem aux;
aux=dp[mask^(1<<i)];
if(aux.weight+v[i+1]<=g)
aux.weight+=v[i+1];
else
{
aux.value++;
aux.weight=v[i+1];
}
if(dp[mask].value>aux.value)
dp[mask]=aux;
else
{
if(dp[mask].value==aux.value && dp[mask].weight>aux.weight)
dp[mask]=aux;
}
}
}
}
fout<<dp[(1<<n)-1].value+1<<"\n";
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
int t;
t=3;
while(t--)
{
solve();
}
fin.close();
fout.close();
return 0;
}