プロジェクトオイラー問191

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%20191
出席のよい生徒に報奨金が出るので、ルールに従った場合報奨金が出る出席パータンは何パターンあるか答えよ。

書いてあることをそのまま実装するだけの実装ゲームです。
漸化式で一発です。

#include<stdio.h>
#include<string.h>
#include<iostream>

int main(){
	__int64 dp[31][3][2];
	memset(dp,0,sizeof(dp));
	dp[0][0][0]=1;
	for(int i=1;i<=30;i++){
		int p=i-1;
		dp[i][2][0]+=dp[p][1][0];//休み
		dp[i][2][1]+=dp[p][1][1];//休み
		dp[i][1][0]+=dp[p][0][0];//休み
		dp[i][1][1]+=dp[p][0][1];//休み
		dp[i][0][0]+=dp[p][0][0]+dp[p][1][0]+dp[p][2][0];//出席
		dp[i][0][1]+=dp[p][0][1]+dp[p][1][1]+dp[p][2][1];//出席
		dp[i][0][1]+=dp[p][2][0];//遅刻
		dp[i][0][1]+=dp[p][1][0];//遅刻
		dp[i][0][1]+=dp[p][0][0];//遅刻
	}
	std::cout<<dp[30][0][0]+dp[30][1][0]+dp[30][2][0]+dp[30][0][1]+dp[30][1][1]+dp[30][2][1]<<"\n";
}
最終更新:2016年01月23日 00:31