Pagini recente » Cod sursa (job #2103865) | Cod sursa (job #816483) | Cod sursa (job #400228) | Cod sursa (job #1004363) | Cod sursa (job #2193518)
#pragma GCC optimize("03")
#include <bits/stdc++.h>
using namespace std;
ifstream in("ghiozdan.in");
ofstream out("ghiozdan.out");
int dp[75300], g[20100], nxt[75300], top[75300], n, G;
int main(){
in >> n >> G;
for(int i = 1; i <= n; i++)
in >> g[i];
sort(g + 1, g + n + 1);
for(int i = n; i; i--){
for(int w = G; w; w--)
// if(dp[w] && (!dp[w + g[i]] || dp[w] + 1 < dp[w + g[i]])){
// dp[w + g[i]] = dp[w] + 1;
// // top[w + g[i]] = g[i];
// // nxt[w + g[i]] = top[w];
// }
if(dp[w])
if(!dp[w + g[i]] || dp[w] + 1 < dp[w + g[i]]){
dp[w + g[i]] = dp[w] + 1;
top[w + g[i]] = g[i];
nxt[w + g[i]] = top[w];
}
else if(w + g[i] <= G)
break;
dp[g[i]] = 1;
top[g[i]] = g[i];
}
for(int i = G; i; i--)
if(dp[i]){
out << i << ' ' << dp[i];
out << '\n' << top[i] << '\n' << nxt[i];
int p = i - top[i] - nxt[i];
while(p)
out << '\n' << top[p], p -= top[p];
return 0;
}
return 0;
}