TB椰程 TypeBuddy 打字搭子

2024-12 · 7级 · 武器购买

GESP 标程 · 考级真题 · 代码 · cpp · 难度 5/5 · 共 1203 字

CCF 原卷官方标程 · 数组与向量、STL、位运算、动态规划 · 本地编译通过(样例文本抽取有缺字,以 OJ 原题为准)

  • 2024-12
  • 数组与向量

正文

// GESP 2024-12 C++ 7级 编程题 1 · 武器购买
// 原题:https://oj.yecheng.tv/p/gs2412l7p1
// 官方原卷:https://gesp.ccf.org.cn/101/attach/1650239779897376.pdf
// 题意:商店里有个武器,第个武器的强度为 ,花费为 。
// 知识点:数组与向量、STL、位运算、动态规划
// 参考程序:CCF 原卷官方标程,PDF 抽取后已去行号;本地编译核验通过,供打字练习
// 原卷样例验证:样例验证 0/1 通过
// 提示:官方样例答案由 PDF 文本化生成,空格/换行可能缺失,样例对比未全通过;程序保持官方原样
//
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll dp[50010];
ll solve(int n, int P, int Q, vector<pair<int, int>>& weapons) {
    dp[0] = 0;
    for (auto& weapon : weapons) {
        int p = weapon.first;
        int c = weapon.second;
        for (int j = Q; j >= c; --j) {
            if (dp[j - c]>=0) {
                dp[j] = max(dp[j], dp[j - c] + p);
            }
        }
    }
    for (int j = 0; j <= Q; ++j) {
        if (dp[j] >= P) {
            return j;
        }
    }
    return -1;
}
int main() {
    int t;
    cin>>t;
    while(t--){
        int n, P, Q;
        cin >> n >> P >> Q;
        memset(dp,-0x3f,sizeof dp);
        vector<pair<int, int> > weapons(n);
        for (int i = 0; i < n; ++i) {
            cin >> weapons[i].first >> weapons[i].second;
        }
        cout << solve(n, P, Q, weapons) << "\n";
    }
    return 0;
}

GESP 标程 · 考级真题的其它内容

打字首页 · 英语学习中心 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK