POJ 1160 Post Office(DP)
2012-08-23 20:22
363 查看
题目链接
一开始那个初始化错了,WA了N次啊。。。Vijos上数据太水了,POJ上本来也想水过的,这个感觉将近O(n^4)的复杂度,交上超时了,本来想优化一下预处理出前i个和的,发现好像这个复杂度,找最小的时候,没法优化。。看了DISCUSS,有人就这样水过的,把INT64啥的,小细节改改成了750ms。。。
四边形不等式优化,纠结。。。
一开始那个初始化错了,WA了N次啊。。。Vijos上数据太水了,POJ上本来也想水过的,这个感觉将近O(n^4)的复杂度,交上超时了,本来想优化一下预处理出前i个和的,发现好像这个复杂度,找最小的时候,没法优化。。看了DISCUSS,有人就这样水过的,把INT64啥的,小细节改改成了750ms。。。
四边形不等式优化,纠结。。。
#include <stdio.h> #include <string.h> #include <stdlib.h> #define N 1000000000 int p[301]; int dp[31][301]; int min(int a,int b) { return a > b ? b:a; } int main() { int n,m,i,j,k,u,sum; scanf("%d%d",&n,&m); for(i = 1;i <= n;i ++) { scanf("%d",&p[i]); } if(n <= m) { printf("0\n"); return 0; } for(i = 2;i <= n;i ++) { for(j = 1;j <= i-1;j ++) dp[1][i] += p[i]- p[j]; } for(i = 2;i <= m;i ++) { for(j = i+1;j <= n;j ++) { dp[i][j] = N; for(k = i-1;k <= j-1;k ++) { sum = dp[i-1][k]; for(u = k+1;u <= j-1;u ++) { sum += min(p[u]-p[k],p[j]-p[u]); } if(dp[i][j] > sum) dp[i][j] = sum; } } } sum = N; for(i = m+1;i <= n;i ++) { for(j = i+1;j <= n;j ++) { dp[m][i] += p[j] - p[i]; } if(sum > dp[m][i]) sum = dp[m][i]; } printf("%d\n",sum); return 0; }
相关文章推荐
- poj 1160 Post Office(dp)
- POJ 1160 Post Office (水DP)
- 【POJ1160】【四边形优化DP】Post Office
- POJ - 1160 Post Office(基础dp)
- 【DP|数学+预处理】POJ-1160 Post Office
- poj - 1160 - Post Office(dp)
- POJ 1160 Post Office (经典dp)
- [dp] poj1160 Post office
- poj 1160 Post Office--DP--类背包问题
- POJ 1160 Post Office(经典DP)
- POJ 1160 Post Office(四边形不等式优化DP)
- POJ 1160 Post Office (DP)
- POJ1160 Post Office (四边形不等式优化DP)
- poj 1160 Post Office(DP-简单DP)
- POJ 1160 Post Office (区间DP+重心)
- poj 1160 Post Office (区间DP)
- POJ1160 Post Office(经典DP)
- 【POJ1160】Post Office(动态规划 DP)
- POJ 1160 Post Office (四边形不等式优化DP)
- POJ 1160 Post Office(抽象的二维DP)