这道题,我在网上看到两种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. JDBC操作封装

    这两天学习了一下jdbc的封装,依据的是下面这篇 http://wenku.baidu.com/link?url=FaFDmQouYkKO24ApATHYmA5QzUcj-UE-7RSSZaBWPqk ...

  2. LocalStorage存储

     1.localStorage存储服务: .factory('storageSvc', [function () { return { //保存数据 save: function (key, valu ...

  3. static和extern关键字 对函数的作用

    本文目录 • 一.extern与函数 • 二.static与函数 • 三.static.extern与函数的总结说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能 ...

  4. 写一个jq插件

    本文章摘自博客园的http://www.cnblogs.com/JustinYoung/archive/2010/03/30/jquery-chajian.html,写此文章只是方便自己记载技术 一个 ...

  5. IP校验和

    #include <stdio.h> #include <unistd.h> #include <linux/if_ether.h> #include <li ...

  6. 【Chromium中文文档】多进程资源加载

    多进程资源加载(需要更新) 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture ...

  7. 1.9 需求订单导入MDS

    1.9          需求订单导入MDS 1.9.1   业务方案描述 将”需求订单维护表”中完成调整维护的需求订单导入系统标准MDS中,使之驱动对应的物料需求计划(MRP)的运行. 1.9.2  ...

  8. DMVsinSQLServer -- 备

    /*************************************************************************************************** ...

  9. MFC DLL资源动态切换

    在MFC使用过程中,遇到DLL资源与主EXE资源冲突问题. 出现这样的Bug,一时无从下手. 报错位置在核心代码中dlgcore.cpp. [cpp] view plaincopy BOOL AFXA ...

  10. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(九)

    目的 1. 使用verilog/vhdl设计一个PCI的watchdog设备. 2. 通过systemverilog 写testbench. 很久之前研究过AC97的verilog代码.但是很久没用v ...