http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2430
题意:大概是有n个柱子,每个的长度是1到h[i]任意一个整数,用一根绳子把这些柱子的顶端都连起来,使得绳子长度最长。
View Code
1 #include <iostream> 2 #include<math.h> 3 #include<cstdio> 4 #include<cstring> 5 using namespace std; 6 int main() 7 { 8 double dp[101][101]; 9 int h[101]; 10 int n,i,k,w,j; 11 double dis; 12 while(~scanf("%d",&n)) 13 { 14 for(i=0;i<n;i++) 15 { 16 scanf("%d",&h[i]); 17 } 18 scanf("%d",&w); 19 memset(dp,0,sizeof(dp)); 20 double max=0; 21 for(i=1;i<n;i++) 22 { 23 for(j=1;j<=h[i];j++) 24 { 25 for(k=1;k<=h[i-1];k++) 26 { 27 dis=sqrt((j-k)*(j-k)+w*w); 28 if(dp[i][j]<dp[i-1][k]+dis) 29 dp[i][j]=dp[i-1][k]+dis; 30 } 31 if(max<dp[i][j]) 32 max=dp[i][j]; 33 } 34 35 } 36 printf("%.6f\n",max); 37 } 38 return 0; 39 }