站外题求助
查看原帖
站外题求助
964817
Breath_of_the_Wild楼主2024/3/30 19:50

小明练功的梅花桩排列成 nn 行 mm 列,相邻两行的距离为 11,相邻两列的距离也为 11。

小明站在第 11 行第 11 列上,他要走到第 nn 行第 mm 列上。小明已经练了一段时间,他现在可以一步移动不超过 dd 的距离(直线距离)。

小明想知道,在不掉下梅花桩的情况下,自己最少要多少步可以移动到目标。

输入 n,m,dn,m,d,输出答案。

My Code:

#include<bits/stdc++.h>
using namespace std;
const int N=1003;
int n,m,dp[N][N];
double d;
double Getdis(int a,int b,int c,int d){
    return sqrt(1.0*abs(a-c)*abs(a-c)+1.0*abs(b-d)*abs(b-d));
}
int main(){
    cin>>n>>m>>d;
    n--,m--;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(i==1&&j==1) continue;
            int ans=1e9;
            for(int x=i;x>=i-(int)d;x--){
                if(x<1) break;
                for(int y=j;y>=j-(int)d;y--){
                    if(x==i&&y==j) continue;
                    if(y<1) break;
                    if(Getdis(i,j,x,y)>d) break;
                    ans=min(dp[x][y],ans);
                }
            }
            dp[i][j]=ans+1;
        }
    }
	  cout<<dp[n][m];
    return 0;
}
2024/3/30 19:50
加载中...