HDU 3506 Monkey Party 区间dp+四边形不等式
来源:互联网 发布:阿里云上传视频教程 编辑:程序博客网 时间:2024/05/24 06:26
//区间dp+四边形不等式优化,先把环变成长链,然后dp[i][j]代表从第i个猴子到第j个猴子全部互相认识需要的最小时间,dp[i][j]=min(dp[i][k]+dp[k+1][j])+sum[i][j];
可以证明是满足四边形不等式的。用四边形优化写一下就好了,然后预处理sum数组就是RMQ问题了,这里我觉得可以过就直接暴力了。
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int a[2010];int s[2010][2010];int dp[2010][2010];int K[2010][2010];int main(){int n;while(scanf("%d",&n)!=EOF){a[0]=0;for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<n;i++)a[i+n]=a[i];for(int i=2;i<2*n;i++)a[i]=a[i-1]+a[i];for(int i=1;i<2*n;i++)for(int j=i;j<2*n;j++)s[i][j]=a[j]-a[i-1];for(int i=1;i<2*n;i++)K[i][i]=i,dp[i][i]=0;for(int len=2;len<=n;len++){for(int i=1;i+len<=2*n;i++){int j=i+len-1;dp[i][j]=999999999*2; for(int k=K[i][j-1];k<=K[i+1][j]&&k<j;k++) { int t=dp[i][k]+dp[k+1][j]+s[i][j]; if(t<dp[i][j]) { dp[i][j]=t;K[i][j]=k; } } } } int ans=999999999*2; for(int i=1;i<=n;i++)ans=min(ans,dp[i][i+n-1]); printf("%d\n",ans);}return 0;}
0 0
- HDU 3506 Monkey Party 区间dp+四边形不等式
- hdu 3506 Monkey Party (区间dp 求环形石子合并+四边形不等式优化)
- HDU 3506 Monkey Party 【DP+四边形不等式优化】
- Monkey Party - HDU 3506 四边形不等式优化
- hdu 3506 Monkey Party(dp四边形优化)
- 【HDU3506,HOJ2952】Monkey Party-环状区间合并DP+四边形不等式优化
- HDU 3506 Monkey Party(区间DP)
- hdu3506 Monkey Party--区间dp & 石子归并 & dp四边形优化
- HDU - 3506 Monkey Party(四边形优化)
- hdu 3506 dp+四边形不等式优化
- hdu 3506 monkey party(环形dp)
- hdu 3516 Tree construction DP+四边形不等式
- HDU 2829 Lawrence【dp四边形不等式优化】
- HDU 3480 Division【dp四边形不等式优化】
- 【斜率/四边形不等式DP】【hdu 2829】Lawrence
- hdu 3516 dp+四边形不等式优化
- hdu 2829 dp+四边形不等式优化
- hdu 3480 dp 四边形不等式优化
- Dividing Stones
- HDU 4893 线段树裸题
- <九度 OJ>题目1098:字母统计
- android架构分析
- LiferayPortlet 中 ActionRequest 和 RenderRequest 的解释
- HDU 3506 Monkey Party 区间dp+四边形不等式
- Java记事本GUI界面设计
- 【网络流-二分图最大匹配】poj3041Asteroids
- SRBF Lighting
- CSS兼容常用技巧
- Objective C中NSArray数组排序总结(二)
- JS实现关键字搜索下拉字段
- 知识点:死锁,多线程高级
- hdu 1811Rank of Tetris 拓扑+并查集