题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=6745
写这道题的时候一直tle,结果发现是因为用的是cin却在a完上一题把cin.tie(0)和ios::sync_with_stdio(0)不小心删了。。。直到结束后才发现
思路:举个例子 求(a,b)逐步减一到两者均为一时一共有多少次互质可以看作 ans(a,b)=max((a-1,b),(a,b-1))+1。(加一的前提是(a,b)互质)。
#include <bits/stdc++.h>
#include <cassert>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int w[10005],c[10005];
int ans,v;
int f[1005][1005],g[1005][1005];
int gcd(int a,int b)
{
if(b == 0)
return a;
return gcd(b,a%b);
}
int main()
{
cin.tie(0);
ios::sync_with_stdio(0);
int t; int ans;cin >> t;
f[1][1]=1;g[1][1]=1;
for(int i=1;i<=1000;i++)
{
for(int j=1;j<=1000;j++)
{
if(i==1) f[i][j]=f[i][j-1]+1;
else if(j==1)
f[i][j]=f[i-1][j]+1;
else
{
if(gcd(i,j)==1)
{
f[i][j]=max(f[i-1][j],f[i][j-1])+1;
}
else f[i][j]=max(f[i-1][j],f[i][j-1]);
}
}
}
while(t--)
{
int a,b;
cin >> a >>b;
printf("%d\n",f[a][b]);
}
return 0;
}
京公网安备 11010502036488号