Find the maximum profit that can be obtained each time, multiple backpacks.
Here we will use a technique. The question "v [I]" is a multiple of 1000, so it can be divided by 1000.
The Code is as follows:
# Include <iostream> # include <cstdio> # include <cstdlib> # include <cmath> # include <cstring> # include <string> # include <vector> # include <list> # include <deque> # include <queue> # include <iterator> # include <stack> # include <map> # include <set> # include <algorithm> # include <cctype> using namespace std; typedef long LL; const int N = 51510; const ll ii = 1000000007; int dp [N], v [15], w [15]; int V, y, n; int main () {int n, I, j, k, l, t; cin> n; while (n --) {scanf ("% d ", & V, & y, & t); for (I = 1; I <= t; I ++) {scanf ("% d ", & v [I], & w [I]); v [I]/= 1000 ;}for (l = 1; l <= y; l ++) {int temp = V/1000; memset (dp, 0, sizeof (dp); for (I = 1; I <= t; I ++) {for (j = v [I]; j <= temp; j ++) // multiple backpacks j = v [I]; j <= temp; j ++ // 01 backpack j = temp; j> = v [I]; j -- if (dp [j] <dp [j-v [I] + w [I]) dp [j] = dp [j-v [I] + w [I];} V + = dp [temp];} printf ("% d \ n ", v);} return 0 ;} # include <iostream> # include <cstdio> # include <cstdlib> # include <cmath> # include <cstring> # include <string> # include <vector> # include <list> # include <deque> # include <queue> # include <iterator> # include <stack> # include <map> # include <set> # include <algorithm> # include <cctype> using namespace std; typedef long LL; const int N = 51510; const ll ii = 1000000007; int dp [N], v [15], w [15]; int V, y, n; int main () {int n, I, j, k, l, t; cin> n; while (n --) {scanf ("% d ", & V, & y, & t); for (I = 1; I <= t; I ++) {scanf ("% d ", & v [I], & w [I]); v [I]/= 1000 ;}for (l = 1; l <= y; l ++) {int temp = V/1000; memset (dp, 0, sizeof (dp); for (I = 1; I <= t; I ++) {for (j = v [I]; j <= temp; j ++) // multiple backpacks j = v [I]; j <= temp; j ++ // 01 backpack j = temp; j> = v [I]; j -- if (dp [j] <dp [j-v [I] + w [I]) dp [j] = dp [j-v [I] + w [I];} V + = dp [temp];} printf ("% d \ n ", v);} return 0 ;}