Pagini recente » Cod sursa (job #1104036) | Cod sursa (job #669619) | Cod sursa (job #122611) | Cod sursa (job #1725689) | Cod sursa (job #2589362)
#include <fstream>
using namespace std;
ifstream f ( "zebughil.in" );
ofstream g ( "zebughil.out" );
const int inf = 20;
const int N = ( 1 << 17 );
int dp[2][N], v[17];
int main()
{ int n, G, i;
for ( int test = 1; test <= 3; test++ ){
f >> n >> G;
for ( i = 1; i <= n; i++ )
f >> v[i];
int Max = ( 1 << n ) - 1;
dp[0][0] = 1;
dp[1][0] = 0;
for ( i = 1; i <= Max; i++ ){
dp[0][i] = inf;
dp[1][i] = 0;
}
for ( int stare = 1; stare <= Max; stare++ ){
for ( int j = 0; ( 1 << j ) <= i; j++ ){
if ( ( stare >> j ) & 1 == 1 ){
int new_stare = stare - ( 1 << j );
int t = 1, gr = v[j + 1];
if ( v[j + 1] + dp[1][new_stare] <= G ){
t = 0;
gr = dp[1][new_stare] + v[j + 1];
}
if ( dp[0][stare] > dp[0][new_stare] + t ){
dp[0][stare] = dp[0][new_stare] + t;
dp[1][stare] = gr;
}
else if ( dp[0][stare] == dp[0][new_stare] + t )
dp[1][stare] = min ( dp[1][stare], gr );
}
}
}
g << dp[0][Max] << '\n';
}
return 0;
}