Part of Jzoj's recursive algorithm (7 questions in total)

2790: Fibonacci Sequence

//斐波那契数列问题
#include <bits/stdc++.h>
using namespace std;
int n, a, ans[1000010];
int main()
{
	ans[1]=1;
	ans[2]=1;
	for(int i=3; i<=1000000; ++i){
		ans[i]=(ans[i-1]+ans[i-2])%1000;
	}
	scanf("%d", &n);
	while(n--){
		scanf("%d", &a);
		printf("%d\n", ans[a]);
	}
	return 0;
}

1159: 【Basic】Stair climbing

//斐波那契数列问题, 爬楼梯问题
#include <bits/stdc++.h>
using namespace std;
int n;
long long ans[210];
int main()
{
	scanf("%d", &n);
	ans[1]=1;
	ans[2]=2;
	for(int i=3; i<=n; ++i){
		ans[i]=ans[i-1]+ans[i-2];
	}
	printf("%lld", ans[n]);
	return 0;
}

2723: [Basic] Take Candy

This is a high-precision Fibonacci sequence problem

Low precision partial method, 60% AC

//斐波那契数列问题, 爬楼梯问题
#include <bits/stdc++.h>
using namespace std;
int n;
long long ans[210];
int main()
{
	scanf("%d", &n);
	ans[1]=1;
	ans[2]=2;
	for(int i=3; i<=n; ++i){
		ans[i]=ans[i-1]+ans[i-2];
	}
	printf("%lld", ans[n]);
	return 0;
}

High precision AC code

#include <bits/stdc++.h>
using namespace std;
int n;
struct node
{
	int len=0;
	int num[2000]={0};	
}ans[210];
node operator + (node x, node y)
{
	node sum;
	sum.len=max(x.len, y.len);
	for(int i=1; i<=sum.len; ++i){
		sum.num[i]+=x.num[i]+y.num[i];
		sum.num[i+1]+=sum.num[i]/10;
		sum.num[i]%=10;
	}
	if(sum.num[sum.len+1]){
		sum.len++;
	}
	return sum;
}
int main()
{
	scanf("%d", &n);
	ans[1].len=1;
	ans[1].num[1]=1;
	ans[2].len=1;
	ans[2].num[1]=2;
	for(int i=3; i<=n; ++i){
		ans[i]=ans[i-1]+ans[i-2];
	}
	for(int i=ans[n].len; i>=1; --i){
		printf("%d", ans[n].num[i]);
	}
	return 0;
}

2789: [Basic] Simplified version of pawn crossing the river

1162: 【NOIP02 Popularization Group】Crossing the River

2792: [Basic] Tower of Hanoi problem

recursion

#include <bits/stdc++.h>
using namespace std;
int n, ans[31];
int main()
{
	scanf("%d", &n);
	ans[1]=1;
	for(int i=2; i<=n; ++i){
		ans[i]=2*ans[i-1]+1;
	}
	printf("%d", ans[n]);
	return 0;
}

2^n-1 steps

#include <bits/stdc++.h>
using namespace std;
int n, ans;
int main()
{
	scanf("%d", &n);
	ans=pow(2, n)-1;
	printf("%d", ans);
	return 0;
}

2793: [Basic] Influenza infection

Guess you like

Origin blog.csdn.net/u013313909/article/details/127237981