Pagini recente » Cod sursa (job #3158368) | Cod sursa (job #69378) | Cod sursa (job #216358) | Cod sursa (job #1086225) | Cod sursa (job #907213)
Cod sursa(job #907213)
#include<iostream>
#include <fstream>
#include<algorithm>
#include<vector>
using namespace std;
#define N 20001
# define M 500001
ifstream f ("ghiozdan.in");
ofstream g ("ghiozdan.out");
int v[M];
int prev[M];
int sum[M];
int n,G,s,k,s1,s2,maxim;
void citire()
{
f>>n>>G;
for( int i=1;i<=n;i++)
{
f>>v[i];
s+=v[i];
}
sort(v+1,v+n+1);
for( int i=1;i<=500000;i++)
sum[i] = 3000000;
}
void proces()
{
for( int i=1;i<=n;i++)
{
for(int j=G-v[i];j>0;j--)
{
if(sum[j] != 3000000)
{
if(sum[j+v[i]] > sum[j]+1) {
sum[j+v[i]] = sum[j]+1;
prev[j+v[i]] = v[i];
}
}
}
if(v[i] <= G) {
sum[v[i]] = 1;
}
}
for( int i=G;i>0;i--)
{
if(sum[i]>0 && sum[i] != 3000000)
{
g<<i<<" "<<sum[i]<<endl;
vector<int> v;
while(i > 0 && prev[i] != 0) {
v.push_back(prev[i]);
i -= prev[i];
}
if(i > 0) {
v.push_back(i);
}
for( int i= v.size()-1; i>=0;i--)
{
g<<v[i]<<'\n';
}
break;
}
}
}
int main()
{
citire();
proces();
return 0;
}