Queue CodeForces - 353D (思維dp)
阿新 • • 發佈:2019-01-28
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) usingnamespace 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)