这道题,我在网上看到两种dp,不过基本原理是一样的,不过感觉还是后面的一种比较巧妙!因为我对动态不是很熟,自能加上一些自己的理解,写上注释。

1)

#include <stdio.h>
#include <string.h>
#include<ctype.h>
char str[];
long long int dp[][]; /*2^63次恰好是longlong int */
int main(void)
{
long long int i,j,len; while(scanf("%s",str) != EOF)
{
memset(dp,,sizeof(dp));
len = strlen(str);
for (i = ;i<len;i++)/*转化为小写字母*/
str[i]=tolower(str[i]); if(str[] == 's')
dp[][] = ; /*dp[j][i] 第i个位置上第j个字母的数量与前面字母交叉匹配的数量;*/
for(i=;i<len;i++)
{
for(j=;j<;j++)/*第i个位置肯不是四个,但是我们要计算个数,那么i个位置无论有没有出现过这个字母都继承前面的 */
dp[j][i]=dp[j][i-];
if(str[i] == 's')/*统计s的数量*/
dp[][i]++;
if(str[i] == 'e')/*每次后面的字母匹配数就加上与之前字母匹配的个数*/
{
dp[][i]+=dp[][i-];
dp[][i]+=dp[][i-];
}
else if(str[i] == 'v')
dp[][i] += dp[][i-];
else if(str[i] == 'n')
dp[][i]+=dp[][i-]; }
printf("%lld\n",dp[][len-]);/*最后一个位置最后一个字母与倒数第二个字母交叉匹配的数量即最后seven隐含的总个数 */
}
return ;
}

2)

#include<stdio.h>
#include<string.h>
#include<ctype.h>
char str[10010];
long long unsigned dp[6];
int main(void)
{
int i,j;
char seven[]=" seven"; while(scanf("%s",str) != EOF)
{
memset(dp,0,sizeof(dp));
dp[0]=1;
for( i=0;str[i];++i)
{
str[i]=tolower(str[i]);
/*dp[j]表示到达seven[j]有多少条路径。如果str[i]和seven[j]相等,
则dp[j]就多出dp[j-1]条路径。类似于01背包,因为str中的每个字符只能取一次,所以要从后往前遍历。
*/
for( j=5;j>0;--j)
if(str[i]==seven[j])
dp[j]=dp[j-1]+dp[j]; /*原理基本和上面代码一样,
都是遇到一个字母就将该字母的匹配数加上前面字母的匹配数
,对seven字母的比较,不过上面的是顺下来,这个倒回去*/
}
printf("%llu\n",dp[5]);
}
return 0;
}

zoj 3171 The Hidden 7's的更多相关文章

  1. ZOJ 3171 The Hidden 7's DP

    传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3203 题目大意给定一串字符串,需要计算出seven的个数. #incl ...

  2. zoj 1729 Hidden Password

    Hidden Passwordhttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=729 Time Limit: 2 Seconds ...

  3. ZOJ 1729 Hidden Password (字符串最小表示)

    以前听过,不知道是什么,其实就是字符串首尾相连成一个环,n种切法求一个字典序最小的表示. 朴素算法大家都懂.O(n)的算法代码非常简单,最主要的思想是失配的时候尽可能大的移动指针. 另外附上一个不错的 ...

  4. 表单reset无法重置hidden的解决方案

    方法一:用text代替hidden,设置text隐藏 <input id="id" name="id" style="display: none ...

  5. overflow:hidden与margin:0 auto之间的冲突

    相对于父容器水平居中的代码margin:0 auto与overflow:hidden之间存在冲突.当这两个属性同时应用在一个DIV上时,在chrome浏览器中将无法居中.至于为啥我也不明白.

  6. ZOJ People Counting

    第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ  3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...

  7. ZOJ 3686 A Simple Tree Problem

    A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a rooted tree, each no ...

  8. 移动端浏览器body的overflow:hidden并没有什么作用

    今天突然遇到一个问题,使用li模拟select,但是碰到一个很尴尬的问题,给body加了overflow:hidden,但是body并没有禁止滚动条,滚动条依旧顺滑. <!DOCTYPE htm ...

  9. display:none与visible:hidden的区别 slideDown与

    display:none与visible:hidden的区别 display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被 ...

随机推荐

  1. JAVA G1收集器 第11节

    JAVA G1收集器 第11节 上两章我们讲了新生代和年老代的收集器,那么这一章的话我们就要讲一个收集范围涵盖整个堆的收集器——G1收集器. 先讲讲G1收集器的特点,他也是个多线程的收集器,能够充分利 ...

  2. js工具常用方法

    /* function obj$(id) 根据id得到对象 function val$(id) 根据id得到对象的值 function trim(str) 删除左边和右边空格 function ltr ...

  3. 有关va_list和vsnprintf输出函数的问题

    va_list ap; //声明一个变量来转换参数列表 va_start(ap,fmt); //初始化变量 va_end(ap); //结束变量列表,和va_start成对使用 可以根据va_arg( ...

  4. css 里层元素撑不开外层元素

    一般是,里面那层做了高度设置,如:height, overflow等 另外可以让里面元素清楚浮动,如:clear:both

  5. Twisted No module named win32api

    安装twisted成功后,使用时抛错: No module named win32api 解决方案,需要安装 pywin32 下载地址: https://sourceforge.net/project ...

  6. sql语句操作记录

    发觉一些sql语句写出来的时候不停忘记,做一个记录. mySQL .查看表的创建过程sql语句和注释,注释是在创建表的过程中增加comment,后面跟随注释的内容 SHOW CRATE TABLE T ...

  7. 使用百度语音识别REST API,做全平台语音识别

    百度语音开发介绍文档: http://yuyin.baidu.com/docs/asr# 使用语音识别,需要在百度申请一个应用,然后拿到API Key和Secret Key,然后才可以使用语音识别 p ...

  8. Unix/Linux环境C编程入门教程(7) OPENBSDCCPP开发环境搭建

    1. 年发起了OpenBSD 专案,希望创造一个注重安全的操作系统. 2.创建一个虚拟机. 3.选择默认的workstation10.0 4.我们选择稍后安装操作系统. 5.我们选择FreeBSD64 ...

  9. 如何让多个不同版本的jquery库共存

    问题描述:公司的登录接口使用的是jquery1.4.2,因为我要使用一个jquery.pagination的分页控件(jquery1.7.2).如果我使用了1.7.2,登录接口会有问题. <sc ...

  10. PostgreSQL的存储系统二:REDOLOG文件存储结构二

    REDOLOG文件里的用户数据和数据文件里的用户数据存储结构相同 几个月前同事给台湾一家公司培训<pg9 ad admin>时,有个学员提及WAL里记录的内容为Query时的SQL语句(比 ...