这道题,我在网上看到两种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. 图片的像素和Android的dp值之间的关系。

    这是一个困扰我很就得问题.今天在我的反复摸索下,总结出了一些个规律. 以下测试以魅族mx5为例. 手机参数:5.5英寸:高:1920:宽1080. /** * 获得屏幕的宽度 * * @param c ...

  2. [Android]Plug-in com.android.ide.eclipse.adt was unable to load class com.android.ide

    今天启动eclipse的时候报了上述错误,打开xml是都报错.其实解决方法很简单:重启eclipse即可.

  3. nodeJs入门笔记(二)

    js中window通常是全局变量 global 是node.js里的全局变量 node中能访问的对象一般都是 global的 属性 global 对象属性 process 用于描述当前Node 进程状 ...

  4. PHP中字符串补齐为定长

    方法一 for ($i=0; $i<100; $i++) { $index = sprintf('%04d', $i); echo $index.'<br />'; } 方法二 fo ...

  5. 在git彻底删除commit记录的方法是什么?

    在github上,如果非默认分支的话,直接用以下方法: git reset --hard <commit_id> git push origin HEAD --force 如是默认分支,需 ...

  6. VHDL testbench 例子,包含向文件中写数据

      LIBRARY ieee; USE ieee.std_logic_1164.ALL; use std.textio.all; use ieee.std_logic_textio.all;   EN ...

  7. @RenderSection

    @RenderSection在母版页中先占个位置,然后在使用该母版的页面中在各自去实现自己的Section. 在母版页_Layout.cshtml中使用格式为 @RenderSection(" ...

  8. CDC变更数据捕获

    CDC变更数据捕获 (2013-03-20 15:25:52)   分类: SQL SQL Server中记录数据变更的四个方法:触发器.Output子句.变更数据捕获(Change Data Cap ...

  9. MiniSD卡是什么

    Mini SD卡比目前主流的普通SD卡(如DC或DV上使用的SD卡),在外形上更加小巧,重量仅有3克左右,体积只有21.5x20x1.4mm,比普通SD卡足足节省了60%的空间.别小看这么小的外形,它 ...

  10. oracle解锁表

    select b.owner,b.object_name,a.session_id,a.locked_mode,c.serial#,c.sid||','||c.serial# from v$locke ...