关闭

tjut 3516

47人阅读 评论(0) 收藏 举报
分类:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1010;
const int infinity=(-1)^(1<<31);
int dp[maxn][maxn];
int s[maxn][maxn];
struct point{
    int x,y;
}p[maxn];
int S(int i,int k,int j){
    return p[k-1].y-p[j].y+p[k].x-p[i].x;
}
int DP(int n){
    //if(n <= 1) return 0;
    for(int i=1;i<=n;i++)
        dp[i][i]=0, s[i][i]=i;
    int tmp;
    for(int i=n-1;i>0;i--){
        for(int j=i+1;j<=n;j++){
            dp[i][j]=infinity;
            for(int k=max(s[i][j-1],i+1);k<=s[i+1][j];k++)
            if(dp[i][j] > (tmp=dp[i][k-1]+dp[k][j]+S(i,k,j)))
                dp[i][j]=tmp, s[i][j]=k;
        }
    }
    return dp[1][n];
}
int main()
{
    int n;
    while(cin>>n){
        for(int i=1;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y);
        printf("%d\n",DP(n));
    }
    return 0;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:31005次
    • 积分:4433
    • 等级:
    • 排名:第6972名
    • 原创:433篇
    • 转载:0篇
    • 译文:0篇
    • 评论:11条
    文章分类