ZOJ3171 The Hidden 7's,DP版

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

/*******************************************************************************
 # Author : Neo Fung
 # Email : neosfung@gmail.com
 # 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;
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值