1. 程式人生 > >Queue CodeForces - 353D (思維dp)

Queue CodeForces - 353D (思維dp)

pro style ace nbsp 復位 define 交換 esp int

https://codeforces.com/problemset/problem/353/D

大意:給定字符串, 每一秒, 若F在M的右側, 則交換M與F, 求多少秒後F全在M左側

$dp[i]$為位置$i$處的$F$復位所花費時間, 有

$dp[i] = max(dp[i-1]+1,cnt_i)$, $cnt_i$為前$i$位$M$的個數

$dp$最大值即為答案

#include <iostream>
#include <algorithm>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)

using
namespace std; const int N = 1e6+10, INF = 0x3f3f3f3f; char s[N]; int main() { scanf("%s", s); int pos = 0, n = strlen(s); for (; s[pos]==F; ++pos); int ans = 0, cnt = 0; REP(i,pos,n-1) { if (s[i]==M) ++cnt; else ans = max(ans+1, cnt); } printf("%d\n"
, ans); }

Queue CodeForces - 353D (思維dp)