洛谷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;
}

浙公网安备 33010602011771号