Luogu P2090 数字对

题面

可以发现,最终状态为(n,i)(i<=n),枚举最终状态,这题为辗转相减求进行了几次,可以优化成辗转相除

时间O(n lg n)

#include<cstdio>
#include<iostream>
using namespace std;

int ans;
inline int sum(int a,int b)
{
	if(!b) return 2e9;
	if(b==1) return a-1;
	return sum(b,a%b)+a/b;
}
int main()
{
	int n; ans=2e9;
	scanf("%d",&n);
	for(int i=1;i<n;i++)
		ans=min(ans,sum(n,i));
	printf("%d\n",ans);
	return 0;
}

  

posted @ 2020-10-12 18:44  wwwsfff  阅读(193)  评论(0)    收藏  举报