題意:見紫書
分析:可以看成兩個人一起走,dp[i][j]表示已經走過了max(i,j)個點還剩多長距離到達最後的點,規定i走在j前面,走的時候只往下走max(i,j)+1的那個點即可,最後的狀態就是乙個人在第n-1個點,求出另乙個人在其他點時的最後所剩距離,然後dfs
**:
#include #include #include #include #include #include #include #include #define frer() freopen("in.txt","r",stdin)
#define frew() freopen("out.txt","w",stdout)
#define go int t;cin>>t;while(t--)
#define debug cout<<"****************"typedef long long ll;
const int maxn = 10000 + 7,inf = 0x3f3f3f3f;
int n;
struct point p[maxn];
double dp[maxn][maxn];
double dist(int i,int j)
double dfs(int i,int j)
int main()
printf("%.2f\n",dfs(1, 1));
}return 0;
}
UVA 1347 Tour 雙調旅行商
題意 平面上有n個點。乙個人要從左上角的點向右走,到右下角的點,然後再回到左上角的點。現在想讓這個人每個點到達一次,且走的總路程的距離最小。求出最小的距離。思路 雙調旅行商問題。因為起點和中途點已知,我們可以把這個問題轉化成兩個人從左上角出發,分別不重複的到達其他點,最後在右下角的點匯合。可以注意到...
uva 10118 免費糖果 深搜 記憶化搜尋
uva 10118 include include define n 45 define c 22 int max int a,int b int pile 4 n f n n n n n,top 4 int dfs int s,int hash c if s 5 籃子滿了,末狀態 return f...
skiing 記憶化深搜
這道題就是找出一條最長連續遞減序列,並求出其長度。可以用記憶化深搜,求出每一點最長序列的長度,然後求最大值即可。如下 include includeusing namespace std const int n 105 int a n n m,n,f n n inline int max int a...