提交时间:2024-03-31 09:13:45

运行 ID: 140758

#include <iostream> #include <cstring> #include <cstring> #include <algorithm> #include <cmath> #define inf 0x3f3f3f3f #define mod 1000000007 typedef long long ll; using namespace std; const int N=1001; int v[N],w[N][N]; double dp[N][N]; int t,n,k,m; int main() { int a,b; cin>>n>>m>>k; for(int i = 1;i <= k;i++){ cin>>a>>b; w[a][b]=1; } //边界条件初始化 for(int i=0;i<=n;i++) dp[i][0]=i*100; for(int i=0;i<=m;i++) dp[0][i]=i*100; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { //如果可以对角线走:走对角线、左边、下边而来 if(w[i][j]) dp[i][j]=min(min(dp[i][j-1]+100,dp[i-1][j]+100),dp[i-1][j-1]+141.42); else //走左边、下边而来 dp[i][j]=min(dp[i][j-1]+100,dp[i-1][j]+100); } } //四舍五入 cout<<(int)(dp[n][m]+0.5)<<endl; return 0; }