Pagini recente » Cod sursa (job #1103772) | Cod sursa (job #2976983) | Cod sursa (job #2920235) | Cod sursa (job #2284471) | Cod sursa (job #1087484)
#include <fstream>
#include <vector>
using namespace std;
ifstream is("ghiozdan.in");
ofstream os("ghiozdan.out");
int n, S;
const int INF = 0x3f3f3f3f;
vector<int> a, g, t;
void Path( int i );
int main()
{
is >> n >> S;
a = vector<int>(n+1);
g = vector<int>(S+1, INF);
t = vector<int>(S+1);
for ( int i = 1; i <= n; i++ )
is >> a[i];
g[0] = 0;
for ( int i = 1; i <= n; i++ )
for ( int j = S; j >= 0; j-- )
if ( g[j] != INF && (g[j + a[i]] > g[j] + 1) )
{
g[j + a[i]] = g[j] + 1;
if ( (t[j+a[i]] > j || t[j+a[i]] == 0 ) && j != 0 )
t[j + a[i]] = j;
}
for ( int i = S; i >= 0; i-- )
if ( g[i] != INF )
{
os << i << ' ' << g[i] << '\n';
Path( i );
break;
}
is.close();
os.close();
return 0;
}
void Path( int i )
{
if ( i == 0 )
return;
Path( t[i] );
os << i - t[i] << '\n';
}