Codeforces - 909C - Python Indentation - 简单dp
http://codeforces.com/problemset/problem/909/C
好像以前做过,但是当时没做出来,看了题解也不太懂。
一开始以为只有上面的for有了循环体,这里的statement就可以随便放,但其实并不是这样,statement的位置会取消比它缩进更多或相等的for的可append性。所以设计dp顺序的时候要用dp[i][j]表示第i行剩余可选for循环数量为j的选法数。那么递推公式也不难(才怪),看看代码就好了。
有几个可以优化的,一个是滚动数组,另一个是线性求前缀和然后均摊O(1)减少一个维度的时间复杂度。
注意读入%c之前要加一个空格来过滤前面还保留在流中的换行符。
#include<bits/stdc++.h>
using namespace std;
#define ll long long ll dp[][];
char ch[];
int n;
int p=; int main(){
scanf("%d",&n); for(int i=;i<n;i++){
scanf(" %c",&ch[i]);
//printf("%c\n",ch[i]);
} int cntf=;
if(ch[]=='f')
cntf++;
dp[][cntf]=;
//可跟随的f的数量
/*for(int j=0;j<=cntf;j++){
printf("dp[%d][%d]=%lld\n",0,j,dp[0][j]);
}
printf("\n");*/ for(int i=;i<n;i++){
if(ch[i]=='f'){
cntf++;
if(i->=&&ch[i-]=='f'){
//dp[i]=dp[i-1];
//不得不跟随
for(int j=;j<=cntf;j++){
dp[i][j]=dp[i-][j-];
}
}
else if(i->=&&ch[i-]=='s'){
//任选一个f进行跟随
ll sum=;
for(int j=;j<=cntf-;j++){
sum=(sum+dp[i-][j])%p;
} ll presum=;
for(int j=;j<=cntf;j++){
dp[i][j]=(sum-presum+p)%p;
presum=(presum+dp[i-][j-])%p;
}
}
}
else{
if(i->=&&ch[i-]=='f'){
//dp[i]=dp[i-1];
//不得不跟随
for(int j=;j<=cntf;j++){
dp[i][j]=dp[i-][j];
}
}
else if(i->=&&ch[i-]=='s'){
//任选一个f进行跟随
ll sum=;
for(int j=;j<=cntf;j++){
sum=(sum+dp[i-][j])%p;
} ll presum=;
for(int j=;j<=cntf;j++){
dp[i][j]=(sum-presum+p)%p;
presum=(presum+dp[i-][j])%p;
}
}
}
/*for(int j=0;j<=cntf;j++){
printf("dp[%d][%d]=%lld\n",i,j,dp[i][j]);
}
printf("\n");*/
} ll sum=;
for(int j=;j<=cntf;j++){
sum=(sum+dp[n-][j])%p;
}
printf("%lld\n",sum); }
---恢复内容结束---
Codeforces - 909C - Python Indentation - 简单dp的更多相关文章
- Codeforces 909C - Python Indentation
909C - Python Indentation 思路:dp. http://www.cnblogs.com/Leohh/p/8135525.html 可以参考一下这个博客,我的dp是反过来的,这样 ...
- Codeforces 909C Python Indentation:树状数组优化dp
题目链接:http://codeforces.com/contest/909/problem/C 题意: Python是没有大括号来标明语句块的,而是用严格的缩进来体现. 现在有一种简化版的Pytho ...
- Codeforces 1108D - Diverse Garland - [简单DP]
题目链接:http://codeforces.com/problemset/problem/1108/D time limit per test 1 secondmemory limit per te ...
- Codeforces - 702A - Maximum Increase - 简单dp
DP的学习计划,刷 https://codeforces.com/problemset?order=BY_RATING_ASC&tags=dp 遇到了这道题 https://codeforce ...
- Codeforces - 1081C - Colorful Bricks - 简单dp - 组合数学
https://codeforces.com/problemset/problem/1081/C 这道题是不会的,我只会考虑 $k=0$ 和 $k=1$ 的情况. $k=0$ 就是全部同色, $k=1 ...
- Codeforces - 474D - Flowers - 构造 - 简单dp
https://codeforces.com/problemset/problem/474/D 这道题挺好的,思路是这样. 我们要找一个01串,其中0的段要被划分为若干个连续k的0. 我们设想一个长度 ...
- CodeForces 30C Shooting Gallery 简单dp
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq574857122/article/details/36944227 题目链接:点击打开链接 给定 ...
- Codeforces - 1033C - Permutation Game - 简单dp - 简单数论
https://codeforces.com/problemset/problem/1033/C 一开始觉得自己的答案会TLE,但是吸取徐州赛区的经验去莽了一发. 其实因为下面这个公式是 $O(nlo ...
- CodeForces 22B Bargaining Table 简单DP
题目很好理解,问你的是在所给的图中周长最长的矩形是多长嗯用坐标(x1, y1, x2, y2)表示一个矩形,暴力图中所有矩形易得递推式:(x1, y1, x2, y2)为矩形的充要条件为: (x1, ...
随机推荐
- TFTP服务器
为什么要学习有关TFTP服务器的安装及配置呢?主要是为了后续学习有关linux系统的无人值守安装做准备. TFTP简单文件传输协议,使用UDP的69端口.主要提供文件的上传和下载,TFTP一般是适用于 ...
- SolidEdge如何绘制变化半径倒圆角
1 在要变化半径的边上打一些点 2 点击倒角命令的参数对话框,选择可变半径 3 选择倒角的直线,右击确认,再依次点击关键点,修改倒角数值,修改之后按回车,继续下一个点,直到结束.
- HDU2897( 巴什博奕变形)
邂逅明下 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- javaweb 中的过滤器 包装器
过滤器要做的事情: 请求过滤器:完毕安全检查,又一次格式化请求首部或体.建立请求审计或日志 响应过滤器: 压缩响应流,追加或改动响应流创建一个全然不同的响应. 过滤器和servlet三个相似地 ...
- 使用maven创建项目和cannot change version web module 3.0
近期下载了最新的Eclipse mars.2, 这个eclipse自带了maven插件,于是就用maven尝试创建一个java web项目. 第一步,例如以下图所看到的选择 Maven Project ...
- FastDFS的配置、部署与API使用解读(1)Get Started with FastDFS(转)
转载请注明来自:诗商·柳惊鸿CSDN博客,原文链接:FastDFS的配置.部署与API使用解读(1)入门使用教程 1.背景 FastDFS是一款开源的.分布式文件系统(Distributed File ...
- u-boot简单学习笔记(三)——AR9331 uboot启动分析
1.最开始系统上电后 ENTRY(_start)程序入口点是 _start 由board/ap121/u-boot.lds引导 2._start: cpu/mips/start.S 是第一个源程序文 ...
- iOS面试常见题
1.耶稣有13个门徒,当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13个人围坐一圈,从第一个人開始循环报数,数到三排除,最后剩下的人就是叛徒 int people[13] = {1,2,3, ...
- c#生成PDF准考证
项目中需要做一个生成PDF准考证的功能,在这里跟大家分享一下思路.. 1.首先是下载Adobe Acrobat 9 Pro,安装破解(高版本的貌似破解,不了,自带正版意识的略过..随意下载) 2.新建 ...
- eclipse 修改代码后无法生效,需要clean后才能生效的解决办法
勾选project-->Bulid Automatically选项(自动编译)