Pagini recente » Cod sursa (job #524168) | Cod sursa (job #2577957) | Cod sursa (job #1461295) | Cod sursa (job #2091880) | Cod sursa (job #1766577)
#include <stdio.h>
using namespace std;
const int MAX = 18;
int v[MAX];
int dp[MAX][1 << MAX];
int max(int a, int b)
{
if(a > b)
return a;
return b;
}
int main()
{
FILE *fin, *fout;
fin = fopen("zebughil.in", "r");
fout = fopen("zebughil.out", "w");
for(int test = 1; test <= 3; test++)
{
int n, g;
fscanf(fin, "%d%d", &n, &g);
for(int i = 0; i < n; i++)
fscanf(fin, "%d", &v[i]);
for(int i = 0; i <= n; i++)
for(int j = 1; j < (1 << n); j++)
dp[i][j] = -1;
for(int k = 1; k <= n; k++)
for(int i = 1; i < (1 << n); i++)
for(int j = 0; j < n; j++)
if(i & (1 << j))
if(dp[k - 1][i ^ (1 << j)] != -1)
dp[k][i] = max(dp[k][i], g - v[j]);
else
if(dp[k][i ^ (1 << j)] >= v[j])
dp[k][i] = max(dp[k][i], dp[k][i ^ (1 << j)] - v[j]);
int j = 1;
int i = (1 << n) - 1;
while(dp[j][i] == -1)
j++;
fprintf(fout, "%d\n", j);
}
return 0;
}