Pagini recente » Monitorul de evaluare | Cod sursa (job #2189927) | Cod sursa (job #3346600) | Monitorul de evaluare | Cod sursa (job #3336903)
#pragma GCC optimize("Ofast,unroll-loops")
#include <fstream>
#include <algorithm>
#define gmax 75002
#define nmax 20002
#define inf 1e9
using namespace std;
ifstream cin("ghiozdan.in");
ofstream cout("ghiozdan.out");
int n,g,x,dp[gmax],t[gmax],a[nmax],maxi,sum;
void rec(int n){
while(t[n]!=0){
cout<<n-t[n]<<'\n';
n=t[n];
}
cout<<n-t[n]<<'\n';
}
signed main()
{
cin>>n>>g;
for(int i=1;i<=g;i++)
dp[i]=inf;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=n;i>0;i--){
for(int j=min(sum,g-a[i]);j>=0;j--)
if(dp[j]!=inf&&dp[j+a[i]]==inf){
dp[j+a[i]]=dp[j]+1;
t[j+a[i]]=j;
maxi=max(maxi,j+a[i]);
}
sum+=a[i];
}
cout<<maxi<<" "<<dp[maxi]<<'\n';
rec(maxi);
return 0;
}