ZOJ3171 The Hidden 7's,DP版

这题算是非典型的DP 吧。可以看一下代码中的注释。

/*******************************************************************************
 # Author : Neo Fung
 # Email : [email protected]
 # Last modified: 2011-09-13 12:53
 # Filename: ZOJ3171 The Hidden 7's.cpp
 # Description : 
 ******************************************************************************/
// ZOJ3171 The Hidden 7's.cpp : Defines the entry point for the console application.
//

// #include "stdafx.h"
// #define DEBUG

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

using namespace std;

int main(void)
{
#ifdef DEBUG  
	freopen("data.txt","r",stdin);  
#endif  
	char seven[]=" seven";
	char str[10010];
	long long unsigned dp[6];

	while(gets(str) && strlen(str))
	{
		memset(dp,0,sizeof(dp));
		dp[0]=1;
		for(int i=0;str[i];++i)
		{
			if (str[i]>='A' && str[i]<='Z')
			{
				str[i]+='a'-'A';
			}
			for(int j=5;j>0;--j)
				if(str[i]==seven[j])	//dp[j]表示到达seven[j]有多少条路径。如果str[i]和seven[j]相等,则dp[j]就多出dp[j-1]条路径。类似于01背包,因为str中的每个字符只能取一次,所以要从后往前遍历。
					dp[j]=dp[j-1]+dp[j];
		}
		printf("%llu\n",dp[5]);
	}
	return 0;
}



你可能感兴趣的:(ZOJ3171 The Hidden 7's,DP版)