Pagini recente » Cod sursa (job #184786) | Cod sursa (job #688183) | Cod sursa (job #41681) | Cod sursa (job #2977739) | Cod sursa (job #2748362)
#include <fstream>
using namespace std;
ifstream cin("ghiozdan.in");
ofstream cout("ghiozdan.out");
const int nmax = 2e4 + 5;
const int gmax = 75e3 + 5;
int n, g, fq[nmax], dp[gmax], wObj[gmax];
void read(){
cin >> n >> g;
for(int i = 1; i <= n; i++){
int w;
cin >> w;
fq[w]++;
}
}
void solve(){
dp[0] = 1;
for(int i = 200; i >= 1; i--)
for(int j = g; j >= 0; j--)
if(dp[j]){
for(int k = 1; i * k + j <= g && k <= fq[i]; k++){
if(dp[i * k + j])
break;
dp[i * k + j] = dp[j] + k;
wObj[i * k + j] = i;
}
}
while(!dp[g])
g--;
cout << g << " " << dp[g] - 1 << "\n";
while(g){
cout << wObj[g] << "\n";
g -= wObj[g];
}
}
int main()
{
read();
solve();
return 0;
}