HDU 3507 Print Article(DP+斜率优化)
2012-08-20 19:02
169 查看
题目链接
对这个 真心不太懂,看这了这个博客,这个博客,这个博客,后有点了解原理了。
斜率优化也是建立在单调队列的基础上的,以上3个博客讲的很详细。把方程写出来,推导公式才是最主要的问题。。。
代码参考题解。 以后再遇到这样的问题慢慢理解吧。
对这个 真心不太懂,看这了这个博客,这个博客,这个博客,后有点了解原理了。
斜率优化也是建立在单调队列的基础上的,以上3个博客讲的很详细。把方程写出来,推导公式才是最主要的问题。。。
代码参考题解。 以后再遇到这样的问题慢慢理解吧。
#include <stdio.h> #include <string.h> #include <stdlib.h> #define N 500001 __int64 dp ,que ,p ,sum ; int slope(int x,int y) { if(sum[x] == sum[y]) { if(dp[x] > dp[y]) return -1; else return 2147483647; } return (dp[x]-dp[y]+sum[x]*sum[x]-sum[y]*sum[y])/(sum[x]-sum[y]); } int main() { int n,m,i,str,end; while(scanf("%d%d",&n,&m)!=EOF) { for(i = 1;i <= n;i ++) { scanf("%I64d",&p[i]); sum[i] = p[i]+sum[i-1]; } str = end = 0; for(i = 1;i <= n;i ++) { while(str < end&&slope(que[str],que[str+1]) < 2*sum[i]) str ++; dp[i] = dp[que[str]] + (sum[i]-sum[que[str]])*(sum[i]-sum[que[str]]) + m; while(str < end&&slope(que[end-1],que[end]) > slope(que[end],i)) end --; end ++; que[end] = i; } printf("%I64d\n",dp ); } return 0; }
相关文章推荐
- hdu 3507 Print Article(dp斜率优化)
- HDU 3507 Print Article【斜率优化dp】
- HDU-3507 Print Article 斜率优化DP
- HDU 3507 Print Article 斜率优化dp
- HDU 3507 Print Article [DP斜率优化]
- hdu 3507 Print Article 斜率优化dp
- hdu 3507 Print Article 斜率优化DP
- hdu 3507 Print Article 斜率优化dp
- HDU 3507 Print Article(斜率优化DP)
- hdu 3507 Print Article(斜率优化dp)
- HDU 3507 Print Article 斜率优化DP
- HDU 3507 Print Article 斜率优化DP
- hdu 3507 Print Article(斜率优化DP)
- HDU 3507 Print Article(斜率优化dp)
- HDU 斜率优化dp 3507 Print Article
- hdu 3507 Print Article(斜率优化DP)
- hdu 3507 Print Article(斜率优化DP)
- HDU 3507 Print Article (斜率优化DP)
- DP(斜率优化):HDU 3507 Print Article
- Hdu 3507 Print Article【斜率优化Dp入门】