题目
题目原文请移步下面的链接
- https://www.luogu.com.cn/problem/CF987C
- https://www.luogu.com.cn/problem/solution/CF987C
- 标签:
OI
、Codeforces
、动态规划
、区间DP
题解
过程
-
动态规划题目重要推导状态迁移方程,推导出方程,代码就好些了;
-
坑点在下面,第一次我开的太小,大数据量时直接爆
-1
分支,后来改成下面这样就AC了。const LL INF = 0x7f7f7f7f7f7f7f;
-
灵异事件:用万能头文件竟然提交失败,害我折腾了几分钟。
代码
#include <vector>
#include <iostream>
using namespace std;
#define endl '\n';
typedef long long LL;
const LL INF = 0x7f7f7f7f7f7f7f;
void best_coder() {
LL solve = INF;
int n;
scanf("%d", &n);
vector<vector<LL>> dp(n, vector<LL>(3, INF));
vector<LL> s(n);
vector<LL> c(n);
for (int i = 0; i < n; ++i) {
scanf("%d", &s[i]);
}
for (int i = 0; i < n; ++i) {
scanf("%d", &c[i]);
}
for (int i = 0; i < n; ++i) {
dp[i][0] = c[i];
for (int k = 1; k < 3; ++k) {
for (int j = 0; j < i; ++j) {
if (s[j] < s[i]) {
dp[i][k] = min(dp[i][k], dp[j][k - 1] + c[i]);
}
}
}
ans = min(solve, dp[i][2]);
}
if (solve == INF) {
printf("%d\n", -1);
} else {
printf("%lld\n", solve);
}
}
void happy_coder() {
}
int main() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 小码匠
best_coder();
// 最优解
// happy_coder();
// 返回
return 0;
}