您的位置:首页 > 其它

ZOJ3171 The Hidden 7's,DP版

2011-09-13 12:54 267 查看
这题算是非典型的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: