suxxsfe

一言(ヒトコト)

洛谷P2437 蜜蜂路线题解

高精度+递推好题

我们发现\(m\)号点可以从\(m-1\)号点和\(m-2\)号点过来。

所以递推公式为:\(dis[i]=dis[i-1]+dis[i-2]\)

看到数据规模,是要用高精度的。

Code:

#include<iostream>
using namespace std;
int m,n;
struct hugeint{
	int num[1001];
	int len;
}dis[1001]; 
hugeint plushuge(hugeint a,hugeint b){//做加法 
	hugeint ans=a; 
	for(int i=1;i<=a.len;i++){
		ans.num[i]=a.num[i]+b.num[i];
	}
	for(int i=1;i<=a.len;i++){
		if(ans.num[i]>=10){
			ans.num[i+1]+=ans.num[i]/10;
			ans.num[i]%=10;
		}
	}
	if(ans.num[a.len+1]){//位数判断 
		ans.len++;
	}
	return ans;
}
int main(){
	cin>>m>>n;
	dis[m].num[1]=1;
	dis[m+1].num[1]=1;
	dis[m].len=1;
	dis[m+1].len=1;//初始化 
	for(int i=m+2;i<=n;i++){//递推求dis[n] 
		dis[i]=plushuge(dis[i-1],dis[i-2]);
	}
	for(int i=dis[n].len;i>=1;i--){//输出 
		cout<<dis[n].num[i];
	}
	return 0;
} 
posted @ 2021-07-29 17:11  卫道士qwq  阅读(215)  评论(0)    收藏  举报