1 条题解

  • 0
    @ 2025-4-7 21:19:29

    C++ :

    #include <cstdio>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int main() {
        int n;
        double q;
        while (scanf("%lf %d", &q, &n) && n > 0) {
            vector < int > v;
            for (int i = 0; i < n; ++i) {
                bool flag = true;
                int m;
                double sum = 0;
                scanf("%d", &m);
                while (m--) {
                    double x;
                    char type;
                    scanf(" %c:%lf", &type, &x);
                    if (type < 'A' || type > 'C')
                        flag = false;
                    if (x > 600)
                        flag = false;
                    sum += x;
                }
                if (sum > 1000)
                    flag = false;
                if (flag)
                    v.push_back(int(sum * 100 + 0.5));
            }
            int m = int(q * 100 + 0.5);
            vector < bool > dp(m + 1, 0);
            dp[0] = 1;
            for (vector < int >::iterator it = v.begin(); it != v.end(); ++it)
                for (int j = m - *it; j >= 0; --j)
                    if (dp[j])
                        dp[j + *it] = true;
            int ans = 0;
            for (int j = m; j >= 0; --j)
                if (dp[j]) {
                    ans = j;
                    break;
                }
            printf("%.2f\n", ans / 100.0);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1175
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者