全部评论 2

  • 置顶

    #include<bits/stdc++.h>
    using namespace std;
    const int MAX_N = 1000;
    const int MAX_M = 500;
    const int MAX_K = 100;
    int dp[MAX_N + 1][MAX_M + 1];
    int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int N, M, K;
    cin >> N >> M >> K;
    memset(dp, -1, sizeof(dp));
    dp[0][0] = 0;
    for (int i = 0; i < K; ++i) {
    int cost, hurt;
    cin >> cost >> hurt;
    for (int j = N; j >= cost; --j) {
    for (int k = M - 1; k >= hurt; --k) {
    if (dp[j - cost][k - hurt] != -1) {
    dp[j][k] = max(dp[j][k], dp[j - cost][k - hurt] + 1);
    }
    }
    }
    }
    int max_cnt = 0;
    for (int j = 0; j <= N; ++j) {
    for (int k = 0; k < M; ++k) {
    if (dp[j][k] != -1) {
    max_cnt = max(max_cnt, dp[j][k]);
    }
    }
    }
    int min_hurt = M;
    for (int j = 0; j <= N; ++j) {
    for (int k = 0; k < M; ++k) {
    if (dp[j][k] == max_cnt) {
    min_hurt = min(min_hurt, k);
    }
    }
    }
    cout << max_cnt << " " << (M - min_hurt) << endl;
    return 0;
    }

    昨天 来自 浙江

    1
  • (互关必回)

    昨天 来自 浙江

    1

热门讨论