dp四边形优化 Hdu 3480 Division 题解
2017-05-19 15:36
363 查看
累加器传送门:
http://blog.csdn.net/NOIAu/article/details/71775000
题目传送门:
https://cn.vjudge.net/problem/HDU-3480
dp状态转移分析博客:
http://blog.csdn.net/NOIAu/article/details/72428364
由于在斜率优化的博客里已经讲解了如何dp转移,这里就不在赘述,显然cost[i][j]=(a[j]-a[i])^2 满足凸性和包含原则(排序后),所以直接四边形优化,如果需要看dp转移,请进入上述的dp转移分析博客代码如下:
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define MAXN 10000+10 int T; int n,m,cn; int a[MAXN],cnt[MAXN]; int dp[MAXN][MAXN],s[MAXN][MAXN]; int sqr(int i){ return i*i; } using namespace std; void init(){ scanf("%d%d",&n,&m); for(register int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); } void dpp(){ for(register int i=1;i<=n;i++){ dp[1][i]=sqr(a[i]-a[1]); s[1][i]=1; } for(register int i=2;i<=m;i++){ s[i][n+1]=n-1; for(register int j=n;j>=i;j--){ int temp=0x7fffffff; int te; for(int k=s[i-1][j];k<=s[i][j+1];k++){ if(temp>dp[i-1][k]+sqr(a[j]-a[k+1])){ temp=dp[i-1][k]+sqr(a[j]-a[k+1]); te=k; } } dp[i][j]=temp; s[i][j]=te; } } printf("Case %d: %d\n",++cn,dp[m] ); } int main(){ scanf("%d",&T); while(T--){ init(); dpp(); } }
相关文章推荐
- hdu 3480 Division(dp四边形优化)
- HDU 3480 Division【dp四边形不等式优化】
- hdu 3480 Division(DP-DP优化)
- hdu 3480 Division 斜率优化dp
- HDU - 3480 Division(四边形优化)
- HDU 3480 Division 斜率优化DP
- hdu-3480-Division-dp-斜率优化
- HDU-3480 Division 【DP+斜率优化(二维)】
- HDU 3480 Division (两个状态的斜率优化DP)
- HDU 3480 Division(斜率优化+二维DP)
- HDU 3480 Division(斜率优化DP)
- hdu 3480 Division (四边形不等式优化DP)
- HDU-3480 Division (四边形不等式优化DP)
- HDU 3480 DP 斜率优化 Division
- dp斜率优化 Hdu 3480 Division 题解
- hdu 3480 Division(斜率优化DP)
- 四边形优化DP(POJ_1160 && HDU_2829 && HDU_3480 && HDU_3506 && HDU_3516)
- hdu3480之二维斜率优化DP
- HDU 3480 Division DP + 四边形优化
- HDU - 3480 Division(斜率优化)