46MLE,求条
查看原帖
46MLE,求条
1133254
wangjingxi_楼主2024/7/31 20:38
#include <bits/stdc++.h>
using namespace std;

const int MAX_L = 1000;

int main() {
    int l, s, t, m;
    cin >> l >> s >> t >> m;

    vector<int> stones(m);
    for (int i = 0; i < m; ++i) {
        cin >> stones[i];
    }
    sort(stones.begin(), stones.end());
    if (s == t) {
        int count = 0;
        for (int i = 0; i < m; ++i) {
            if (stones[i] % s == 0) {
                ++count;
            }
        }
        cout << count << endl;
        return 0;
    }

    vector<int> dp(l+t+1,MAX_L);
    dp[0] = 0;
    vector<int> mark(l+t+1,0);
    for (int i = 0; i < m; ++i) {
        mark[stones[i]] = 1;
    }

    for (int i = 0; i <= l; ++i) {
        if (dp[i] == MAX_L) continue;
        for (int j = s; j <= t; ++j) {
            int next = i + j;
            dp[next] = min(dp[next], dp[i] + mark[next]);
        }
    }
    int result = MAX_L;
    for (int i = l; i <= l + t; ++i) {
        result = min(result, dp[i]);
    }

    cout << result << endl;
    return 0;
}

改了两天,还是46,求调,若思路问题希望各位大佬给予方法或思路。

2024/7/31 20:38
加载中...