Pagini recente » Cod sursa (job #2202245) | Cod sursa (job #2970692) | Cod sursa (job #1100608) | Borderou de evaluare (job #2100028) | Cod sursa (job #2242101)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 17;
int dp[1 << MAXN][MAXN + 1];
int arr[MAXN];
int main() {
FILE *fi, *fout;
int i, n, g;
fi = fopen("zebughil.in" ,"r");
fout = fopen("zebughil.out" ,"w");
while(fscanf(fi,"%d %d " ,&n,&g) == 2) {
for(i = 0; i < n; i++) {
fscanf(fi,"%d " ,&arr[i]);
}
for(i = 1; i <= n; i++) {
dp[0][i] = g + 1;
}
for(int conf = 1; conf < (1 << n); conf++) {
int cnt = __builtin_popcount(conf);
for(i = 0; i <= n; i++) {
dp[conf][i] = g + 1;
}
for(i = 0; i < n; i++) {
if(conf & (1 << i)) {
for(int j = 1; j <= cnt; j++) {
if(dp[conf ^ (1 << i)][j] + arr[i] <= g) {
dp[conf][j] = min(dp[conf][j], dp[conf ^ (1 << i)][j] + arr[i]);
}
if(dp[conf ^ (1 << i)][j - 1] <= g) {
dp[conf][j] = min(dp[conf][j], arr[i]);
}
}
}
}
}
i = 1;
while(dp[(1 << n) - 1][i] > g) {
i++;
}
fprintf(fout,"%d\n" ,i);
}
fclose(fi);
fclose(fout);
return 0;
}