USACO 2.3.2 Cow Pedigrees

DP問題  注意狀態定義以及轉移方式

#include <iostream>
#include <fstream>
#include <string>
#define MOD 9901
//#define LOCAL

using namespace std;

#ifdef LOCAL
ofstream fout ("out.txt");
ifstream fin ("in.txt");
#else
ofstream fout ("nocows.out");
ifstream fin ("nocows.in");
#endif

int dp[220][110];
int sum[220][110];

int main()
{
	int num;
	int depth;
	fin>>num>>depth;
	dp[0][0] = 1;
	for (int i = 1; i <= depth; ++i)
	{
		for (int j = 1; j <= num; ++j)
		{
			for (int k = 0; k < j; ++k)
			{
				dp[j][i] = (dp[j][i] + (dp[k][i-1]*sum[j-k-1][i-1])*2)%MOD;
				dp[j][i] = (dp[j][i] + dp[k][i-1]*dp[j-k-1][i-1])%MOD;
			}

			for (int l = 0; l <= i-2; ++l)
			{
				sum[j][i-1] = (sum[j][i-1]+dp[j][l])%MOD;
			}
		}
	}
	fout<<dp[num][depth]<<endl;
    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章