Pagini recente » Cod sursa (job #1287440) | ONIS 2015, Solutii Runda 1 | Arhiva de probleme | Photo | Cod sursa (job #2321834)
#include <fstream>
#define MAX 10000000
#define N 17
using namespace std;
pair <int, long long> dp[(1<<N)+5];
long long a[N+5];
ifstream f("zebughil.in");
ofstream g("zebughil.out");
void solve()
{
int n;
long long G;
f>>n>>G;
for(int i=1;i<(1<<n);i++)
dp[i].first=MAX;
for(int i=1;i<=n;i++)
{
f>>a[i];
dp[(1<<(i-1))].first=1;
dp[(1<<(i-1))].second=G-a[i];
}
for(int i=1;i<(1<<n);i++)
{
for(int j=1;j<=n;j++)
{
if(!(i&(1<<(j-1)))) continue;
int aux=(i^(1<<(j-1)));
if(dp[aux].second>=a[j])
{
if(dp[aux].first==dp[i].first)
dp[i].second=max(dp[aux].second-a[j],dp[i].second);
if(dp[aux].first<dp[i].first)
dp[i]=make_pair(dp[aux].first,dp[aux].second-a[j]);
}
else
{
if(dp[aux].first+1==dp[i].first)
dp[i].second=max(G-a[j],dp[i].second);
if(dp[aux].first+1<dp[i].first)
dp[i]=make_pair(dp[aux].first+1,G-a[j]);
}
}
}
g<<dp[(1<<n)-1].first<<"\n";
}
int main()
{
for(int t=1;t<=3;t++)
solve();
return 0;
}