Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cstring>
- #include <stack>
- using namespace std;
- ifstream inf("e_also_big.in");
- ofstream outf("e_also_big.out");
- const int MMAX = 1000000000, NMAX = 10000;
- int v[NMAX];
- short dp[MMAX + 1];
- stack<short> stk;
- int main() {
- int n, m, x;
- inf >> m >> n;
- memset(dp, 0x3f, sizeof(dp));
- dp[0] = -1;
- for(int i = 0; i < n; i++) {
- inf >> x;
- for(int j = x; j <= m; j++) {
- if(dp[j] > n && dp[j - x] < i) {
- dp[j] = i;
- }
- }
- v[i] = x;
- }
- int rez, cnt = 0;
- for(int i = m; i >= 0; i--) {
- if(dp[i] < n) {
- rez = i;
- break;
- }
- }
- while(rez) {
- cnt++;
- stk.push(dp[rez]);
- rez -= v[dp[rez]];
- }
- outf << cnt << '\n';
- while(!stk.empty()) {
- outf << stk.top() << ' ';
- stk.pop();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement