Pagini recente » Cod sursa (job #1682307) | Cod sursa (job #821673) | Cod sursa (job #2985420) | Cod sursa (job #3252749) | Cod sursa (job #1891066)
#include <bits/stdc++.h>
#define Nmax 20002
#define Gmax 75002
using namespace std;
ifstream f("ghiozdan.in");
ofstream g("ghiozdan.out");
int n,gmax;
int m1[Gmax],m2[Gmax],v[Nmax];
bool used[Nmax][Gmax];
int main()
{
f>>n>>gmax;
for(int i=1;i<=n;i++){
f>>v[i];
for(int j=0;j<=gmax;j++){
if(j<v[i])
m2[j]=m1[j];
else
{
if(m1[j-v[i]]+v[i]>=m1[j]){
used[i][j]=1;
m2[j]=m1[j-v[i]]+v[i];
}else{
m2[j]=m1[j];
}
}}
for(int i=1;i<=gmax;i++){
m1[i]=m2[i];
m2[i]=0;
}
}
int i=n,j=gmax;
while(!used[i][j])i--;
vector <int> q;
while(i>0&&j>0&&used[i][j]==1){
q.push_back(v[i]);
j=j-v[i];
i--;
}
g<<m1[gmax]<<" "<<q.size()<<"\n";
for(int i=0;i<q.size();i++)g<<q[i]<<"\n";
return 0;
}