Pagini recente » Cod sursa (job #1685205) | Cod sursa (job #1601742) | Cod sursa (job #594019) | Monitorul de evaluare | Cod sursa (job #3244365)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("ghiozdan.in");
ofstream out("ghiozdan.out");
int W[20001];
int dp[20001][75001];
int main(){
int N, Gmax;
in >> N >> Gmax;
for(int i = 1; i<=N; i++){
in >> W[i];
}
for(int i = 1; i<=N; i++){
for(int wg = 0; wg<=Gmax; wg++){
dp[i][wg] = dp[i-1][wg];
if(W[i] <= wg)
dp[i][wg] = min(dp[i-1][wg], dp[i-1][wg-W[i]]) + 1;
}
}
/*
for(int i = 0; i<=Gmax; i++)
cout << dp[N][i];
*/
int p = Gmax;
int l = N;
while(dp[N][p] == dp[N][p-1]) p--;
out << p << " " << dp[N][p] << "\n";
while(l){
if(dp[l][p] != dp[l-1][p]){
out << W[l] << "\n";
p-=W[l];
}
l--;
}
}