hdu6024
Posted wushanni
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu6024相关的知识,希望对你有一定的参考价值。
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int maxn = 3010; const ll INF = 1e9; int pos[maxn], cost[maxn]; ll dp[maxn][2]; int main() { int n; while(cin >> n) { for(int i = 1; i <= n; i++) dp[i][0] = dp[i][1] = 2 * INF; for(int i = 1; i <= n; i++) { scanf("%d%d", &pos[i], &cost[i]); } dp[1][1] = cost[1]; for(int i = 2; i <= n; i++) { dp[i][1] = min(dp[i - 1][0], dp[i - 1][1]) + cost[i]; //第i个建造糖果屋 dp[i][0] = dp[i - 1][1] + pos[i] - pos[i - 1]; //第i个不建造糖果屋,向前找到接在哪个糖果屋后面建造总花费最小 ll sum = pos[i] - pos[i - 1]; int k = 1; for(int j = i - 1; j >= 2; j--) { sum += (pos[j] - pos[j - 1]) * (++k); dp[i][0] = min(dp[i][0], dp[j - 1][1] + sum); } /* ll pre; for(int j = 1; j < i; j++) { if(dp[j][1] != 2 * INF) pre = j; } dp[i][0] = pos[i] - pos[pre] + dp[pre][1]; 错误 dp[i][1] = cost[i] + min(dp[i - 1][1], dp[i - 1][0]); */ } cout << min(dp[n][0], dp[n][1]) << endl; } return 0; }
以上是关于hdu6024的主要内容,如果未能解决你的问题,请参考以下文章