Pagini recente » Cod sursa (job #2070575) | Cod sursa (job #2528239) | Cod sursa (job #2216635) | Cod sursa (job #3270964) | Cod sursa (job #1977843)
#include <cstdio>
using namespace std;
int f[210];
int last[75010];
int dp[75010];
int main()
{
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
int n, G;
scanf("%d%d", &n, &G);
for(int i=1; i<=n; i++)
{
int x;
scanf("%d", &x);
f[x]++;
}
dp[0] = 1;
for(int i=200; i>0; i--)
if(f[i])
for(int j=G-i; j>=0; j--)
if(dp[j])
for(int k=1; k<=f[i]; k++)
{
if(j+k*i > G || dp[j+k*i]) break;
dp[j+k*i] = dp[j]+k;
last[j+k*i] = i;
}
for(int i=G; i>0; i--)
if(dp[i])
{
printf("%d %d\n", i, dp[i]-1);
while(i)
{
printf("%d\n", last[i]);
i -= last[i];
}
return 0;
}
return 0;
}