Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <string>#include <vector>#include <utility>using namespace std;#define MAXN 205#define MAXB 2005#define M 0#define F 1class node{public:int v, s, id;node(int _v = 0, int _s = 0, int _id = -1) :v(_v), s(_s), id(_id) {}};int lim[2], cnt[2] = { 0 }, p[2][MAXB];int f[2][MAXN][MAXN][MAXB] = { 0 }, g[2][MAXN][MAXN][MAXB];vector<node> vec[2];void dfs(int s, int i, int j, int k, vector<int> &ans){if (j > 0) {i = g[s][i][j][k];if (f[s][i - 1][j][k] < f[s][i - 1][j - 1][k - vec[s][i].v] + vec[s][i].s) {ans.push_back(vec[s][i].id);