Pagini recente » Cod sursa (job #817211) | Cod sursa (job #1389033) | Cod sursa (job #500932) | Cod sursa (job #2952218) | Cod sursa (job #2286954)
#include<bits/stdc++.h>
using namespace std;
const int MX = 75000;
const int N = 200;
int ar[N + 1];
bitset<MX + 1> dp[N + 1];
int main(){
int n, g; cin >> n >> g;
for(int i = 0; i < n; ++i){
int x; cin >> x;
ar[x]++;
}
dp[0][0] = true;
for(int i = 1; i <= N; ++i){
for(int j = 0; j <= ar[i]; ++j){
dp[i] |= (dp[i - 1] << (j * i));
}
}
int mx = 0;
int mn = 0;
for(int i = 0; i <= g; ++i) if(dp[N][i])mx = i;
vector<int> ans;
int cur = mx;
for(int i = N; i >= 0; --i){
for(int j = ar[i]; j >= 0; --j){
int nx = cur - j * i;
if(nx < 0)continue;
if(dp[i - 1][nx]){
cur = nx;
while(j--)ans.push_back(i);
}
}
}
cout << mx << " " << ans.size() << endl;
for(int i = 0; i < ans.size(); ++i){
cout << ans[i] << endl;
}
}