UVa-10003 - Cutting Sticks
2015-09-10 00:52
302 查看
区间dp,O(n^3)的算法很容易想。先递增枚举区间的长度d,再枚举起点i,再枚举切点k(i<k<j)(j=i+d))。代码如下:(0.039s)
然后看书上说可以用四边形不等式优化到O(n^2),今天新买的黑书到手了,看了看讲解(p151,最优二分检索树)。大意是找k值的决策有单调性,利用此单调性并记录下来,可以在O(1)找到决策。代码如下:(0.029s) (rank 4!)
关于四边形不等式,http://blog.csdn.net/shiwei408/article/details/8791011 可以看这个博客。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=55; int l,n; int p[maxn]; int dp[maxn][maxn]; int main() { while(scanf("%d",&l)&&l) { memset(dp,0x3f,sizeof(dp)); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&p[i]); p[n+1]=l; for(int d=1;d<=n+1;d++) for(int i=0;i+d<=n+1;i++) { if(d==1) dp[i][i+1]=0; else { for(int k=i+1;k<i+d;k++) dp[i][i+d]=min(dp[i][i+d],dp[i][k]+dp[k][i+d]); dp[i][i+d]+=p[i+d]-p[i]; } } printf("The minimum cutting is %d.\n",dp[0][n+1]); } }
然后看书上说可以用四边形不等式优化到O(n^2),今天新买的黑书到手了,看了看讲解(p151,最优二分检索树)。大意是找k值的决策有单调性,利用此单调性并记录下来,可以在O(1)找到决策。代码如下:(0.029s) (rank 4!)
关于四边形不等式,http://blog.csdn.net/shiwei408/article/details/8791011 可以看这个博客。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=55; int l,n; int p[maxn]; int dp[maxn][maxn]; int kp[maxn][maxn]; int main() { while(scanf("%d",&l)&&l) { memset(dp,0x3f,sizeof(dp)); memset(kp,0,sizeof(kp)); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&p[i]); p[n+1]=l; for(int d=1;d<=n+1;d++) for(int i=0;i+d<=n+1;i++) { int j=i+d; if(d==1) { dp[i][i+1]=0; kp[i][i+1]=i+1; } else { for(int k=kp[i][j-1];k<=kp[i+1][j];k++) if(dp[i][k]+dp[k][j]<dp[i][j]) { dp[i][j]=dp[i][k]+dp[k][j]; kp[i][j]=k; } dp[i][j]+=p[j]-p[i]; } } printf("The minimum cutting is %d.\n",dp[0][n+1]); } }
相关文章推荐
- lucas 定理学习
- CD4541B定时器的使用方法
- Uva-12118 Inspector's Dilemma
- oracle:通过触发器实现对数据库对象增删改动作的审计
- 多线程的实现方式和安全性
- 创建本地SVN版本库以及将SVN导入GIT
- fuckou
- MOBA游戏草丛系统的个人思路
- java 断言
- ZOJ 3213 Beautiful Meadow(插头DP)
- 使用编译原理,把逻辑编排交给策划
- 广州实时公交查询系统调研
- AWS ECS 的auto scaling
- libevent使用点滴(3)关于定时器
- 【邂逅BUG】Namespace declaration statement has to be the very first statement in the script
- 在Windows 上配置 php和mongodb 数据库
- USACO 1.4 Arithmetic Progressions
- mapreduce任务中数据分布倾斜导致reduce负载不均衡的解决方案
- DontDestroyOnLoad带来的麻烦
- <转> Android LayoutInflater详解