132C Logo Turtle
来源:互联网 发布:ipadpro下载不了软件 编辑:程序博客网 时间:2024/05/06 18:09
题目传送门
给一个含有T、F的字符串,T表示转向,F表示前进1格。现在可以把其中的T改为F,或F改为T,改变n次(可重复改变某一位置的字母),问相对于起点最远能走多远。
考虑每一个命令,选择改变或者不改变,当前的决策对于以后产生的影响就是,停在了哪个位置,正朝着哪个方向。
由此可以设出状态:dp[i][j][k][d]表示前i个命令,使用了j次机会,当前停留在k位置,正朝着d方向。
不妨设初始位置为L,则最右可到达2×L,最左可达到0位置
不妨设初始位置为L,则最右可到达2×L,最左可达到0位置
#include<bits/stdc++.h>using namespace std;bool dp[101][51][201][2];char s[105];int main(){ int i,j,k,d,n,L; scanf("%s%d",s+1,&n); L=strlen(s+1); dp[0][0][L][1]=1; for(i=1;i<=L;++i) for(j=0;j<=n;++j) for(k=0;k<=2*L;++k) for(d=0;d<2;++d) { if(!dp[i-1][j][k][d]) continue; int d1=d,d2=d,K; if(s[i]=='T') { d1=!d; K=k; } else { if(d) K=k+1; else K=k-1; } dp[i][j][K][d1]=1; if(j<n) { if(s[i]=='F') { d2=!d; K=k; } else { if(d2) K=k+1; else K=k-1; } dp[i][j+1][K][d2]=1; } } int ans=0; for(i=n;i>=0;i-=2) for(j=0;j<=2*L;++j) for(d=0;d<2;++d) if(dp[L][i][j][d]) ans=max(ans,abs(j-L)); printf("%d\n",ans); return 0;}
0 0
- 132C Logo Turtle
- Codeforces 132C. Logo Turtle
- codeforces 132 C. Logo Turtle
- 【Codeforces 132C】 Logo Turtle
- codeforce 132c C. Logo Turtle
- codeforces 132C Logo Turtle--- dp dfs
- Codeforces 132C.Logo Turtle【DP,dfs】
- codeforces 132C Logo Turtle (记忆优化)
- codeforces 132C Logo Turtle dp DFS 搜索答案
- CF 132C Logo Turtle[dp+记忆化搜索]
- 四维dp(codeforces 132C - Logo Turtle)
- CodeForces 132C Logo Turtle 四维DP 递推
- Codeforces Beta Round #96 (Div. 1) C. Logo Turtle (DP)
- F-Logo Turtle codeforces
- Codeforces Beta Round #96 (Div. 1) C. Logo Turtle —— DP
- Turtle
- Logo! 24C 输出接线
- logo
- Lucene4.10使用教程(四):lucene的Search
- PDF转word破解版使用
- 母牛的故事
- COM组件编程—接口定义语言IDL
- 时光机穿梭
- 132C Logo Turtle
- 【DP】Codeforces Round #139 (Div. 2)225 C Barcode
- PopWindow动画实现底部滑出菜单
- 微信网页开发
- RSCP和ECNO都很差了,为什么不切换到比它信号好的小区(中兴设备)
- Oracle汉字三种排序:nlssort函数的用法以及参数
- Lucene4.10使用教程(五):lucene的分词器
- 使用函数模板需要注意的几个地方
- c++ C++