关于thupc a题
  • 板块学术版
  • 楼主Sving1024
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/12/15 16:07
  • 上次更新2024/12/15 19:10:38
查看原帖
关于thupc a题
1007938
Sving1024楼主2024/12/15 16:07


WA Code:

#include <algorithm>
#include <cmath>
#include <cstring>
#include <deque>
#include <iostream>
#include <ostream>
using namespace std;

using ll = long long;
using ull = unsigned long long;

const ll N = 155, M = 1e4 + 5;

struct card {
    ll w, d, t;
    card() { w = d = t = -1; }
};

struct node {
    ll ind;
    ll val;
};

ll s[N];
ll dp[N];
card cards[M];
ll cost[N][M];
deque<node> q[M];
ll n, m, c;

int main() {
    cin >> n >> m >> c;
    for (ll i = 1; i <= n; i++) {
        cin >> s[i];
    }
    for (ll i = 0; i < m; i++) {
        cin >> cards[i].w >> cards[i].d >> cards[i].t;
    }
    for (ll i = 1; i <= n; i++) {
        for (ll j = 0; j < m; j++) {
            cost[i][j] = cost[i - 1][j] + max(s[i] - cards[j].t, 0ll) * c;
        }
    }
    memset(dp, 0x3f, sizeof(dp));
    dp[0] = 0;
    for (ll j = 0; j < m; j++) {
        q[j].push_back({0, dp[0] - cost[0][j]});
    }
    for (ll i = 1; i <= n; i++) {
        for (ll j = 0; j < m; j++) {
            while (q[j].front().ind < i - cards[j].d) {
                q[j].pop_front();
            }
            dp[i] = min(dp[i], q[j].front().val + cost[i][j] + cards[j].w);
        }
        dp[i] = min(dp[i], dp[i - 1] + s[i] * c);
        for (ll j = 0; j < m; j++) {
            while (!q[j].empty() && q[j].back().val > dp[i] - cost[i][j]) {
                q[j].pop_back();
            }
            q[j].push_back({i, dp[i] - cost[i][j]});
        }
    }
    cout << dp[n] << endl;
    return 0;
}

这里思路哪里有问题?

2024/12/15 16:07
加载中...