10130SuperSale
来源:互联网 发布:中国古代史网络课答案 编辑:程序博客网 时间:2024/04/28 18:48
一开始想到的是全家能带出去的,当然啦,这样想幸好样例过不了,不然是ym了,然后想每个人做一次背包的总和,ok,样例过了,submit accepted#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAXG 131#define MAXN 1001int p[MAXN], w[MAXN], G[MAXN], dp[MAXG];int zero_one_knapsack(const int &n, const int &g){ int sum(0); for(int i = 0; i < g; i ++) { memset(dp, 0, sizeof(dp)); for(int j = 0; j < n; j ++) { for(int v = G[i]; v >= w[j]; v --) { dp[v] = max(dp[v], dp[v-w[j]]+p[j]); } } sum += dp[ G[i] ]; } return sum;}int main(int argc, char const *argv[]){#ifndef ONLINE_JUDGE freopen("test.in", "r", stdin);#endif int cas, n, g; scanf("%d", &cas); while( cas -- ) { scanf("%d", &n); for(int i = 0; i < n; i ++) { scanf("%d %d", &p[i], &w[i]); } scanf("%d", &g); for(int i = 0; i < g; i ++) { scanf("%d", &G[i]); } printf("%d\n", zero_one_knapsack(n, g)); } return 0;}