| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
终于刷到0ms了。。。。这题边界好麻烦啊。。贴AC代码Source Code
Problem: 1160 User: yzhw
Memory: 788K Time: 0MS
Language: GCC Result: Accepted
Source Code
# include <stdio.h>
# include <string.h>
# include <math.h>
int n,m;
int data[302],len1[302][302],dp[32][302],path[32][302];
int main()
{
int i,j,k;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&data[i]);
for(i=1;i<n;i++)
{
len1[i][i+1]=abs(data[i+1]-data[i]);
len1[i][i]=0;
}
len1[n][n]=0;
for(i=2;i<=n;i++)
for(j=1;j<=n;j++)
if(j+i<=n)
{
int mid=j+i/2;
len1[j][j+i]=len1[j+1][j+i-1]+abs(data[j]-data[mid])+abs(data[j+i]-data[mid]);
}
for(i=1;i<=n;i++)
dp[1][i]=len1[1][i],path[1][i]=1;
for(i=2;i<=m;i++)
{
j=n;
dp[i][j]=999999;
for(k=path[i-1][j];k<j;k++)
if(dp[i-1][k]+len1[k+1][j]<dp[i][j])
dp[i][j]=dp[i-1][k]+len1[k+1][j],path[i][j]=k;
for(j=n-1;j>i;j--)
{
dp[i][j]=999999;
for(k=path[i-1][j];k<=path[i][j+1];k++)
if(dp[i-1][k]+len1[k+1][j]<dp[i][j])
dp[i][j]=dp[i-1][k]+len1[k+1][j],path[i][j]=k;
}
}
printf("%d\n",dp[m][n]);
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator