QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#852573 | #9987. 骑行计划 | Alencryenfo | WA | 140ms | 7820kb | C++20 | 2.5kb | 2025-01-11 12:57:57 | 2025-01-11 12:57:57 |
Judging History
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'