HDU 4258 Covered Walkway【斜率优化dp】
来源:互联网 发布:云计算的教育应用案例 编辑:程序博客网 时间:2024/06/05 14:27
这题跟HDU3507差不多。
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;const int maxn = 1000010;int n;__int64 c, x[maxn];__int64 dp[maxn];int q[maxn], head, tail;__int64 dy(int j, int i){ return dp[i] + x[i+1] * x[i+1] - (dp[j] + x[j+1] * x[j+1]); }__int64 dx(int j, int i){ return 2 * (x[i+1] - x[j+1]); } void DP(){ dp[0] = 0; head = tail = 0; q[tail++] = 0; for (int i = 1; i <= n; ++i) { while (tail - head >= 2) { int k = q[head], j = q[head+1]; if (dy(k, j) < dx(k, j) * x[i]) { head++; } else { break; } } dp[i] = dp[q[head]] + (x[i] - x[q[head]+1]) * (x[i] - x[q[head]+1]) + c; while (tail - head >= 2) { int k = q[tail-2], j = q[tail-1]; if (dy(k, j) * dx(j, i) >= dx(k, j) * dy(j, i)) { tail--; } else { break; } } q[tail++] = i; } printf("%I64d\n", dp[n]);}int main(){ while (scanf("%d%I64d", &n, &c) != EOF) { if (n == 0 && c == 0) break; for (int i = 1; i <= n; ++i) { scanf("%I64d", &x[i]); } for (int i = 2; i <= n; ++i) { x[i] -= x[1]; } x[1] = 0; DP(); } return 0;}
- HDU 4258 Covered Walkway【斜率优化dp】
- hdu 4258 Covered Walkway(斜率优化DP)
- HDU 4258 Covered Walkway(斜率优化DP)
- HDU 4258(Covered Walkway-斜率优化)
- HDU 4258 Covered Walkway【单调队列斜率优化】
- hdu 4258 Covered Walkway
- HDU 4258 Covered Walkway
- hdu 4258 Covered Walkway
- HDU 4258 Covered Walkway (DP +数形结合)#by Plato 终于A出来了~~~~~
- hdu 4258(斜率优化DP)
- 【斜率优化dp】HDU 2993
- hdu 3507 斜率优化dp
- HDU 3480 DP+斜率优化
- hdu 2993 斜率优化DP
- hdu 3507 斜率优化DP
- hdu 2829 斜率优化DP
- hdu 3507 斜率优化dp
- hdu 3507 斜率dp优化
- 双击.dsw文件时另开VC6.0,而不会关掉原来已打开的项
- Eclipse快捷键
- c 字符串、字符和字节 strlen、strcpy、strcat、strcmp、strchr、strstr
- DMI 用法
- C++Builder函数集(文件操作、获取时间、类型转换等)
- HDU 4258 Covered Walkway【斜率优化dp】
- form表单中name属性值为submit时,无法提交,出现"对象不支持此属性或方法"
- sys_call_table
- 复合索引优化
- Chapter 4 Arrays and Pointers
- 搞IT的好友们,注意了将来身体是革命的本钱哦
- 北大光华本科女强人的超长综合面经
- Game with points(数学,难度中)
- andengine学习