信息学奥赛一本通---第二部分 基础算法 --- 第三章 递推算法个别题题解

179 阅读1分钟

注:此为c++代码

    虽然我的代码无注释,但如想复制,必须完全搞懂代码所对应的题!

Dev c++这东西点进来的都有吧,详情见我的另一篇文章。

正式进入题解部分:          (本人小白,大佬们请勿吐槽)

1312:

#include<bits/stdc++.h>
using namespace std;
long long int x,y,e[100],c[100],z;
int main(){
	cin>>x>>y>>z;
	for(int i=1;i<=z+1;i++){
		if(i<=x){
			e[i]=0;
			c[i]=1;
		}
		else{
			e[i]=c[i-x]*y;
			c[i]=c[i-1]+e[i-2];
		}
	}
	cout<<c[z+1];
	return 0;
}

1314:

#include<bits/stdc++.h>
using namespace std;
long long int f[100][100],m,n,x,y;
int main(){
	cin>>n>>m>>x>>y;
	for(int i=0;i<=n;i++){
		for(int j=0;j<=m;j++){
			if(i==0&&j==0) f[i][j]=1;
			else if(i==x&&j==y||abs(i-x)+abs(j-y)==3&&i!=x&&j!=y) f[i][j]=0;
			else if(i==0) f[i][j]=f[i][j-1];	
			else if(j==0) f[i][j]=f[i-1][j];
			else f[i][j]=f[i-1][j]+f[i][j-1];
		}
	}
	cout<<f[n][m];
	return 0;
}

1189:

#include<bits/stdc++.h>
using namespace std;
long long int a[1000001],k,n,maxx=2;
int main(){
	a[1]=1;
	a[2]=2;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>k;
		if(k>maxx){
			for(int j=maxx;j<=k;j++) a[j]=(2*a[j-1]+a[j-2])%32767;
			maxx=k;
		}
		cout<<a[k]<<endl;
	}
	return 0;
}

1190:

#include<bits/stdc++.h>
using namespace std;
long long int n,a[100];
int main(){
	a[1]=1;
	a[2]=2;
	a[3]=4;
	while(cin>>n){
		if(n==0) return 0;
		for(int i=4;i<=n;i++) a[i]=a[i-1]+a[i-2]+a[i-3];
		cout<<a[n]<<endl;
	}
	return 0;
}

1196:

#include<bits/stdc++.h>
using namespace std;
long long int n,f[100];
int main(){
	cin>>n;
	f[1]=3;
	f[2]=7;
	for(int i=3;i<=n;i++) f[i]=2*f[i-1]+f[i-2];
	cout<<f[n];
	return 0;
}
//水分代码

下次发:

信息学奥赛一本通

1315,1316,1198,1200,1202,1203,1206,1207,1208,1211