Pagini recente » Cod sursa (job #238965) | Cod sursa (job #2383353) | Cod sursa (job #262942) | Cod sursa (job #2844918) | Cod sursa (job #2239664)
#include <bits/stdc++.h>
using namespace std;
typedef pair< int, int > pii;
typedef pair< long long, long long > pll;
typedef long long ll;
typedef vector< int > vi;
typedef vector< ll > vll;
typedef vector< pii > vpii;
typedef long double ld;
ll lgput(ll a, ll b, ll mod) {
ll ret = 1;
while( b ){
if(b & 1) ret = (ret * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return ret;
}
int binarySearch(vector< int > &v, int value) {
int best = 0;
for(int step = 29; step >= 0; --step) {
if(best + (1<<step) < v.size() && v[best + (1<<step)] <= value) best += (1<<step);
}
return best;
}
const int MAXG = 75010;
const int inf = 0x3f3f3f3f;
int fv[210];
int dp[MAXG];
int last[MAXG];
int main() {
ios::sync_with_stdio(false);
ifstream f("ghiozdan.in");
ofstream h("ghiozdan.out");
int n;
f >> n;
int g;
f >> g;
memset(dp, 0x3f, sizeof dp);
for(int i = 1; i <= n; ++i) {
int x;
f >> x;
fv[x] ++;
}
dp[0] = 0;
for(int i = 200; i > 0; --i) {
if(!fv[i]) continue;
for(int j = g; j >= 0; --j) {
if(dp[j] == inf) continue;
for(int k = 1; k <= fv[i]; ++k) {
int nxt = j + k*i;
if(nxt > g || dp[nxt] != inf) break;
dp[nxt] = dp[j] + k;
last[nxt] = i;
}
}
}
for(int i = g; i >= 0; --i) {
if(dp[i] != inf) {
h << i << ' ' << dp[i] << '\n';
while(last[i]) {
h << last[i] << '\n';
i -= last[i];
}
return 0;
}
}
return 0;
}