【动态规划】蓝桥2020:画廊_ci

 

【动态规划】蓝桥2020:画廊_算法_02

 

【动态规划】蓝桥2020:画廊_算法_03

 

【动态规划】蓝桥2020:画廊_算法_04

 

【动态规划】蓝桥2020:画廊_动态规划_05

 dp[i][j][1]的初始化类似

#include<iostream>
#include<math.h>
using namespace std;
int L,R,d,w;

const int INF=1e9;
int u[10001];
int v[10001];
double dp[1000][1000][2];


void input(){
	cin>>L>>R>>d>>w;
	for(int i=1;i<=L;i++){
		cin>>u[i];
	}
	for(int i=1;i<=R;i++){
		cin>>v[i];
	}
}
double dis(int i,int j,int flag){
	if(flag==0){
		return u[j]-u[i];
	}
	if(flag==2){
		return v[j]-v[i];
	}
	else{
		return sqrt(w*w+(u[i]-v[j])*(u[i]-v[j]));
	}
}
int main(){
	input(); 
	double l1=sqrt((w*1.0/2)*(w*1.0/2)+u[1]*u[1]);
	double l2=sqrt((w*1.0/2)*(w*1.0/2)+v[1]*v[1]);
	for(int i=1;i<=R;i++)
	{
	    dp[0][i][0]=INF;
	 	dp[0][i][1]=l2+v[i]-v[1];
	 }
	for(int i=1;i<=L;i++)
	{  
	    dp[i][0][1]=INF;
	  	dp[i][0][0]=l1+u[i]-u[1];
    }

	for(int i=1;i<=L;i++){
		for(int j=1;j<=R;j++){
			dp[i][j][0]=min(dp[i-1][j][0]+dis(i-1,i,0),dp[i-1][j][1]+dis(i,j,1));
			dp[i][j][1]=min(dp[i][j-1][1]+dis(j-1,j,2),dp[i][j-1][0]+dis(i,j,1));
		}
	}
	double res=min(dp[L][R][0]+sqrt((w*1.0/2)*(w*1.0/2)+(d-u[L])*(d-u[L])),dp[L][R][1]+sqrt((w*1.0/2)*(w*1.0/2)+(d-v[R])*(d-v[R])));
	printf("%.2f",res);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.