1 条题解
-
0
C++ :
#include <stdio.h> #include <string.h> #include <iostream> #include <string> #include <queue> #include <stack> #include <math.h> #include <map> #include <vector> #include <list> #include <stdlib.h> #include <set> #include <algorithm> using namespace std; typedef long long ll; #define rep(i,s,t) for(int i=s;i<t;i++) #define red(i,s,t) for(int i=s-1;i>=t;i--) #define ree(i,now) for(int i=head[now];i!=-1;i=edge[i].next) #define clr(a,v) memset(a,v,sizeof a) #define MID(x,y) int mid=(x+y)>>1 #define L t<<1 #define R t<<1|1 #define mk(i,j) make_pair(i,j) #define SQR(x) ((x)*(x)) inline int input(){ int ret=0;int isN=0;char c=getchar(); while(c<'0' || c>'9'){ if(c=='-') isN=1; c=getchar(); } while(c>='0' && c<='9'){ ret=ret*10+c-'0'; c=getchar(); } return isN?-ret:ret; } inline void output(int x){ if(x<0){ putchar('-');x=-x; } int len=0,data[11]; while(x){ data[len++]=x%10;x/=10; } if(!len) data[len++]=0; while(len--) putchar(data[len]+48); putchar('\n'); } inline double dis(int a,int b,int w){ return sqrt(SQR(a-b)+SQR(w)); } double dp[110][110]; int n,w,a[110]; int main(){ int t=input(); while(t--){ n=input(),w=input(); rep(i,0,101) rep(j,0,101) dp[i][j]=0.0; rep(i,1,n+1) a[i]=input(); rep(i,1,a[1]+1) dp[1][i]=0.0; rep(i,2,n+1){ rep(j,1,a[i]+1){ rep(k,1,a[i-1]+1){ dp[i][j]=max(dp[i][j],dp[i-1][k]+dis(j,k,w)); } } } double ans=0; rep(i,1,a[n]+1) ans=max(ans,dp[n][i]); printf("%.3lf\n",ans); } return 0; }
- 1
信息
- ID
- 977
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者