2017"百度之星"程序设计大赛

31 int n, m, a[MAXN * 100], b[MAXN * 100] , k[MAXN], p[MAXN];
32 int dp[11][MAXN];
33 
34 int main() {
35     ios::sync_with_stdio(false), cin.tie(0);
36     while (cin >> n >> m) {
37         rep(i, 0, n) cin >> a[i] >> b[i];
38         rep(i, 0, m) cin >> k[i] >> p[i];
39         memset(dp, 0x3f, sizeof(dp));
40         rep(i, 0, 11) dp[i][0] = 0;
41         rep(K, 0, 11) {
42             rep(i, 0, m) p[i] -= K;
43             rep(i, 0, 1001) rep(j, 0, m) if (p[j] > 0) {
44                 if (p[j] >= i) dp[K][i] = min(dp[K][i], k[j]);
45                 else dp[K][i] = min(dp[K][i], dp[K][i - p[j]] + k[j]);
46             }
47             rep(i, 0, m) p[i] += K;
48         }
49         ll ans = 0, fg = 1;
50         rep(i, 0, n) {
51             if (dp[b[i]][a[i]] == INF) {
52                 cout << -1 << endl;
53                 fg = 0;
54                 break;
55             }
56             ans = ans + dp[b[i]][a[i]];
57         }
58         if (fg) cout << ans << endl;
59     }
60     return 0;
61 }
原文地址:https://www.cnblogs.com/baocong/p/7290091.html