QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#852573#9987. 骑行计划AlencryenfoWA 140ms7820kbC++202.5kb2025-01-11 12:57:572025-01-11 12:57:57

Judging History

This is the latest submission verdict.

  • [2025-01-11 12:57:57]
  • Judged
  • Verdict: WA
  • Time: 140ms
  • Memory: 7820kb
  • [2025-01-11 12:57:57]
  • Submitted

answer

#include <iostream>
#include <vector>
#include <climits>
using namespace std;
constexpr int maxn = 150;
int n, m, c, maxTime = 0;
vector<int> s;

int main() {
    cin >> n >> m >> c;
    s.resize(n + 1);
    for (int i = 1; i <= n; i++) {
        cin >> s[i];
        maxTime = max(maxTime, s[i]);
    }
    //骑行时间的前缀和数组
    vector<vector<int> > sumTime(maxTime + 1, vector<int>(n + 1, 0));
    for (int i = 1; i <= maxTime; i++) {
        for (int j = 1; j <= n; j++) {
            sumTime[i][j] = sumTime[i][j - 1] + (max(s[j] - i + 1,0));
        }
    }
    //处理骑行卡
    vector<vector<int> > infoCard(maxn + 1, vector<int>(n + 1,INT_MAX/2));
    for (int i = 1; i <= m; i++) {
        int w, d, t;
        cin >> w >> d >> t;
        infoCard[min(t,maxTime)][d] = min(w, infoCard[min(t,maxTime)][d]);
    }
    for (int i = 1; i <= maxTime; i++) {
        for (int j = n - 1; j >= 1; j--) {
            infoCard[i][j] = min(infoCard[i][j], infoCard[i][j + 1]);
        }
    }
    //动态规划
    vector<vector<vector<int> > > dpArray(maxTime + 1, vector<vector<int> >(n + 1, vector<int>(n + 1,INT_MAX/2)));
    vector<vector<vector<int> > > dpTMPArray(maxTime + 1, vector<vector<int> >(n + 1, vector<int>(n + 1,INT_MAX/2)));
    for (int i = maxTime; i >= 1; i--) {
        for (int l = n; l >= 1; l--) {
            for (int r = l; r <= n; r++) {
                dpArray[i][l][r] = (sumTime[i][r] - sumTime[i][l - 1]) * c;
                if (i==maxTime)dpTMPArray[i][l][r]=infoCard[i][r-l+1];
                else dpTMPArray[i][l][r] = min(dpTMPArray[i+1][l][r],infoCard[i][r-l+1]+dpArray[i + 1][l][r]);
                for (int x = l; x <= r; x++) {
                    for (int y = x + 1; y <= r; y++) {
                        int tmp = 0;
                        if (x - 1 >= l)tmp += dpArray[i][l][x - 1];
                        if (y <= r)tmp += dpArray[i][y][r];
                        dpArray[i][l][r] = min(tmp+dpTMPArray[i][x][y-1], dpArray[i][l][r]);
                        // for (int j = i; j <= maxTime; j++) {
                        //     int ttmp = tmp + infoCard[j][y - x];
                        //     if (j != maxTime) {
                        //         ttmp += dpArray[j + 1][x][y - 1];
                        //     }
                        //     dpArray[i][l][r] =min( ttmp,dpArray[i][l][r]);
                        // }
                    }
                }
            }
        }
    }
    cout << dpArray[1][1][n] << endl;
    return 0;
}

详细

Test #1:

score: 0
Wrong Answer
time: 140ms
memory: 7820kb

input:

85 5408 4856
52 43 38 21 33 28 24 46 4 66 14 51 63 24 69 35 50 9 63 58 43 69 1 28 59 56 50 63 12 23 41 6 19 9 41 45 14 52 6 7 1 24 30 9 33 54 71 38 55 28 61 10 21 13 22 56 29 24 19 27 9 3 25 54 45 50 9 42 13 5 32 37 56 51 24 3 12 37 68 29 69 40 53 50 69
486593 41 10
175445 13 5
1271250 9 35
7064 1 2...

output:

1702899

result:

wrong answer 1st lines differ - expected: '1440909', found: '1702899'