Pagini recente » Cod sursa (job #2683968) | Cod sursa (job #1844064) | Cod sursa (job #1134743) | Cod sursa (job #3130958) | Cod sursa (job #18881)
Cod sursa(job #18881)
#include <cstdio>
#include <string>
#define maxn 20001
#define maxS 75001
#define oo 0x3f3f3f3f
#include <algorithm>
using namespace std;
int main()
{
int G, n, x[maxn], dp[maxS], nr[maxS], pi[maxS], i, j;
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
scanf("%d %d\n", &n, &G);
for(i=1;i<=n;i++) scanf("%d\n", &x[i]);
memset(dp, 0, sizeof(dp));
memset(nr, oo, sizeof(nr));
memset(pi, 0, sizeof(pi));
sort(x+1, x+n+1);
reverse(x+1, x+n+1);
dp[0]=1;
nr[0]=0;
for(i=1;i<=n;++i)
for(j=G;j>=x[i];--j)
if(dp[j-x[i]])
if(nr[j-x[i]]+1<nr[j])
{
//printf("%d \n", j);
dp[j]=1;
nr[j]=nr[j-x[i]]+1;
pi[j]=x[i];
// break;
}
int poz=0, Nr=0;
for(i=G;i>=0;i--)
if(dp[i]) { poz=i; break;}
for(i=poz;i>0;i-=pi[i]) Nr++, dp[i]=2;
printf("%d %d\n", poz, Nr);
for(i=G;i>=0;i--)
if(dp[i]==2)
printf("%d\n", pi[i]);
return 0;
}