MySoul


私信TA

用户名:18813155923

访问量:3552

签 名:

跟C语言网说拜拜了,转战洛谷去咯!

等  级
排  名 100
经  验 8540
参赛次数 0
文章发表 8
年  龄 18
在职情况 学生
学  校 北方工业大学
专  业 计算机科学与技术

  自我简介:


#include <iostream>
using namespace std;
int n,a[4][10001];//a[i][j]用来记录还剩j次考试时且这次考试是第i门时的总情况数。避免深搜的重复计算次数,提高效率。 
int dfs(int step,int sign)
{
	if(a[sign][n-step]!=0)
	{
		return a[sign][n-step];//输出已经得出的该情况下的步数 
	}
	if(step==n-1)
	{
		return 1;//最后一次考试,不需要再往后推了,直接返回1。 
	}
	switch(sign)
	{ 
		case 0:return a[sign][n-step]=(a[sign][n-step]+dfs(step+1,1))%7654321;
		case 1:return a[sign][n-step]=(a[sign][n-step]+dfs(step+1,2)+dfs(step+1,0))%7654321;
		case 2:return a[sign][n-step]=(a[sign][n-step]+dfs(step+1,1)+dfs(step+1,3))%7654321;
		case 3:return a[sign][n-step]=(a[sign][n-step]+dfs(step+1,2))%7654321;
	}
}
int main()
{
	cin>>n;
	cout<<dfs(0,0);
}


 

0.0分

5 人评分

  评论区

  • «
  • »