Pagini recente » Cod sursa (job #1765354) | Cod sursa (job #2685666) | Cod sursa (job #2163375) | Cod sursa (job #618707) | Cod sursa (job #2515158)
#include <iostream>
#include<cstdio>
#include<fstream>
using namespace std;
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
const int N=205;
const int NMAX=75005;
int fr[N],dp[NMAX];
struct ajutorsol{
int val,sz;
};
ajutorsol last[NMAX];
int main()
{
int n,g;
fin>>n>>g;
for(int i=1;i<=n;i++){
int a;
fin>>a;
fr[a]++;
}
int maxi=0;
for(int i=200;i>0;i--){
if(fr[i]){
for(int j=maxi;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;
maxi=max(maxi,j+k*i);
}
}
}
}
}
}
int gmax=g;
while(dp[gmax]==0 && gmax>0){
gmax--;
}
fout<<gmax<<" "<<dp[gmax]<<"\n";
while(gmax){
for(int i=1;i<=last[gmax].sz;i++){
fout<<last[gmax].val<<"\n";
}
gmax-=last[gmax].val*last[gmax].sz;
}
return 0;
}