题目大意:商场进行促销活动,有n件商品,给出每件商品的重量和价格。一家人去购物,每个人只能搬运wi重量的物品,而且每种商品只能购买一件,问这家人最多能买多少钱的商品。典型的0-1背包问题。
1 #include2 #include 3 using namespace std; 4 5 int p[1010], w[1010]; 6 int dp[1010][35]; 7 8 int main() 9 {10 #ifdef LOCAL11 freopen("in", "r", stdin);12 #endif13 int T;14 scanf("%d", &T);15 while (T--)16 {17 int n;18 scanf("%d", &n);19 for (int i = 1; i <= n; i++)20 scanf("%d%d", &p[i], &w[i]);21 int k, sum = 0;22 scanf("%d", &k);23 while (k--)24 {25 int x;26 scanf("%d", &x);27 for (int i = 0; i <= 30; i++)28 dp[0][i] = 0;29 for (int i = 1; i <= n; i++)30 for (int j = 0; j <= x; j++)31 {32 dp[i][j] = dp[i-1][j];33 if (j >= w[i])34 dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+p[i]);35 }36 sum += dp[n][x];37 }38 printf("%d\n", sum);39 }40 return 0;41 }