原题链接:http://codeforces.com/contest/586/problem/B
题意:
大概就是给你一个两行的路,让你寻找一个来回的最短路,并且不能走重复的路。
题解:
就枚举上下选的是哪条路来跨过主干道就好
代码:
#include<iostream> #include<cstring> #include<vector> #define MAX_N 55 using namespace std; int n; int a[2][MAX_N]; int sum[2][MAX_N]; int b[MAX_N]; int main(){ cin>>n; for(int i=0;i<2;i++) for(int j=1;j<=n-1;j++){ cin>>a[i][j]; sum[i][j]=a[i][j]+sum[i][j-1]; } for(int i=1;i<=n;i++)cin>>b[i]; int ans=1008611; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ if(i==j)continue; ans=min(ans,b[i]+b[j]+sum[0][i-1]+sum[1][n-1]-sum[1][i-1]+sum[0][j-1]+sum[1][n-1]-sum[1][j-1]); } cout<<ans<<endl; return 0; }