Pagini recente » Cod sursa (job #3041567) | Cod sursa (job #2512069) | Cod sursa (job #616731) | Cod sursa (job #2386302) | Cod sursa (job #2515150)
#include <iostream>
#include<cstdio>
using namespace std;
const int N=205;
const int NMAX=75005;
int fr[N],dp[NMAX];
struct ajutorsol{
int val,sz;
};
ajutorsol last[NMAX];
int main()
{
FILE*fin,*fout;
fin=fopen("ghiozdan.in","r");
fout=fopen("ghiozdan.out","w");
int n,g;
fscanf(fin,"%d%d",&n,&g);
for(int i=1;i<=n;i++){
int a;
fscanf(fin,"%d",&a);
fr[a]++;
}
for(int i=200;i>0;i--){
if(fr[i]){
for(int j=g;j>=0;j--){
if(dp[j] || j==0){
for(int k=1;k<=fr[i] && k*i+j<=g;k++){
if(dp[j+k*i]==0){
last[j+k*i]={i,k};
dp[j+k*i]=dp[j]+k;
}
}
}
}
}
}
int gmax=g;
while(dp[gmax]==0 && gmax>0){
gmax--;
}
fprintf(fout,"%d %d\n",gmax,dp[gmax]);
while(gmax){
int sz=last[gmax].sz;
while(sz--){
fprintf(fout,"%d\n",last[gmax].val);
}
gmax=gmax-last[gmax].val*last[gmax].sz;
}
return 0;
}