1. 程式人生 > 其它 >2021藍橋杯省賽B組(C/C++)E.路徑【最短路DP】

2021藍橋杯省賽B組(C/C++)E.路徑【最短路DP】

2021藍橋杯省賽B組題目(C/C++)E.路徑

 

 最短路徑, 因為變化情況比較多, 所以開始想的是深搜, 但是太慢了, 跑不出來, 後來就想著優化一下, 有的地方到另一個地方可能會考慮很多遍, 於是考慮了DP

 

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int,int> PII;
const int N = 1e8+10, M = 21;
LL res = 9999999999999;
LL f[2880][30], ff[200030];//陣列開的比較大, 怕爆
//ff[i]是到i的最短路, f[i][j]從i開始走j步後一共需要走多少 //這題還不算難, 隨便開個二維的就能過了 , 但是當時沒想出來 int main() { int n = 2021; for(int i = 0; i <= 20000; i ++) ff[i] = 9999999999999; ff[1] = 0; for(int i = 1; i < n; i ++) for(int j = 1; j <= 21; j ++) { LL xx = ff[i]+(LL)i*(i+j)/__gcd(i, i+j); f[i][j]
= xx, ff[i+j] = min(ff[i+j],xx); if(ff[i+j]==0)cout << i << ' '<<j <<'\n'; } cout <<ff[2021]<< '\n'; return 0; }