标签:style blog http color os strong io for
以为可以做出这个dp 可是就是写不好 这个状态转移方程 fuck
题意 还是很简单的... touch me贴下别人的思路 :----因为 我自己没做出来--传送
1 #include<stdio.h> 2 #include<string.h> 3 4 const int maxn=220; 5 const int INF=99999999; 6 7 int dis[maxn],dp[maxn][maxn],cost[maxn][maxn]; 8 9 int abs(int x){ 10 return x<0?-x:x; 11 } 12 13 int min(int a,int b){ 14 return a<b?a:b; 15 } 16 17 int main(){ 18 19 //freopen("input.txt","r",stdin); 20 21 int n,k; 22 int cases=0; 23 while(scanf("%d%d",&n,&k)){ 24 int i,j,m; 25 if(n==0 && k==0) 26 break; 27 for(i=1;i<=n;i++) 28 scanf("%d",&dis[i]); 29 for(i=1;i<=n;i++) 30 for(j=i;j<=n;j++){ 31 cost[i][j]=0; 32 for(m=i;m<=j;m++) 33 cost[i][j]+=abs(dis[m]-dis[(i+j)/2]); 34 } 35 for(i=1;i<=n;i++) 36 dp[1][i]=cost[1][i]; 37 for(i=2;i<=k;i++) 38 for(j=i;j<=n;j++){ 39 dp[i][j]=INF; 40 for(m=i-1;m<=j-1;m++) 41 dp[i][j]=min(dp[i][j],dp[i-1][m]+cost[m+1][j]); 42 } 43 printf("Chain %d\nTotal distance sum = %d\n\n",++cases,dp[k][n]); 44 } 45 return 0; 46 }
我还是对于dp[ i ] [ j ]的前一个状态考虑的不周到啊啊 哎。。。
这题 还是蛮有价值的=-=
标签:style blog http color os strong io for
原文地址:http://www.cnblogs.com/radical/p/3879502.html