题解:P16343 [科大国创杯初中组 2026] 行走
由于小可可走路的时候在不停的取最大公因数,所以最后答案一定是
注意到
枚举答案后如何验证?
我们知道,如果小可可走过的路径上所有数的最大公因数为
所以可以枚举答案
具体过程用动态规划实现,详见代码。
#include<bits/stdc++.h>
using namespace std;
int n,v,a[1010][1010];
bool dp[1010][1010];
int main()
{
cin>>n>>v;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(int i=a[1][1];i>=1;i--)
{
if(a[1][1]%i==0)
{
memset(dp,0,sizeof(dp));
dp[1][1]=1;
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
if((dp[j][k]||dp[j-1][k]||dp[j][k-1])&&a[j][k]%i==0)
{
dp[j][k]=1;
}
}
}
if(dp[n][n])
{
cout<<i;
return 0;
}
}
}
return 0;
}