提交时间:2023-04-10 13:45:16

运行 ID: 73843

/* * __----~~~~~~~~~~~------___ * . . ~~//====...... __--~ ~~ * -. \_|// |||\\ ~~~~~~::::... /~ * ___-==_ _-~o~ \/ ||| \\ _/~~- * __---~~~.==~||\=_ -_--~/_-~|- |\\ \\ _/~ * _-~~ .=~ | \\-_ '-~7 /- / || \ / * .~ .~ | \\ -_ / /- / || \ / * / ____ / | \\ ~-_/ /|- _/ .|| \ / * |~~ ~~|--~~~~--_ \ ~==-/ | \~--===~~ .\ * ' ~-| /| |-~\~~ __--~~ * |-~~-_/ | | ~\_ _-~ /\ * / \ \__ \/~ \__ * _--~ _/ | .-~~____--~-/ ~~==. * ((->/~ '.|||' -_| ~~-/ , . _|| * -_ ~\ ~~---l__i__i__i--~~_/ * _-~-__ ~) \--______________--~~ * //.-~~~-~_--~- |-------~~~~~~~~ * //.-~~~--\ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * \|/ */ #define itn int #include<stdio.h> #include<iostream> #include<stack> #include<cmath> using namespace std; const int N=1e3+10; inline int read(char ch=getchar(),int n=0,int m=1) { while(ch<'0' or ch>'9') { if(ch=='-')m=-1; ch=getchar(); } while(ch>='0' and ch<='9')n=(n<<3)+(n<<1)+ch-'0',ch=getchar(); return n*m; } ostream& operator <<(ostream& o,__uint128_t &a) { __uint128_t x=a; stack<int>s; while(x)s.push(x%10),x/=10; while(!s.empty())o<<s.top(),s.pop(); return o; } int n=read(),m=read(),k=read(),a[N],b[N]; bool flag[N][N]; double f[N][N]; signed main() { for(int i=1;i<=k;i++)a[i]=read(),b[i]=read(),flag[a[i]][b[i]]=true; for(itn i=1;i<=n;i++)f[i][0]=i*100; for(int i=1;i<=m;i++)f[0][i]=i*100; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { f[i][j]=min(f[i-1][j]+100,f[i][j-1]+100); if(flag[i][j])f[i][j]=min(f[i][j],f[i-1][j-1]+sqrt(20000)); } cout<<(int)(f[n][m]+0.5); return 0; }