七夕——永远在一起(一维dp)
永远在一起
题目链接:https://ac.nowcoder.com/acm/contest/18962/I
题目描述:给定一个只有'W'、'F'、'?'三种字符组成偶数长字符串,'?'可以当做任意字符。统计其中有多少对'WF'、'FW'构成的子串。
某人:“I题以前也遇到过。”
“当时好像写了很久最后多了一个测试代码没注释,没过,印象深刻。”
“不对,I题优化上应该还得用二维DP。”
“如果连续没有'?',只要不中断就是+1+2+3这种递增,中断了就是回到1。”
“遇到?分情况讨论。”
然后,然后,很明显就WA掉了,题目判断跑偏但没有完全跑偏。测试数据case0%...
AC代码:
#include <iostream>
using namespace std;
const int N = 200010;
int f[N][2];
string s;
int main()
{
    cin >> s;
    for(int i = 0; i < s.size(); i++)
    {
        if(s[i] == '?'){
            f[i][1] = f[i - 1][0] + 1;
            f[i][0] = f[i - 1][1] + 1;
        }
        else if(s[i] == 'W'){
            f[i][0] = f[i - 1][1] + 1;
        }
        else{
            f[i][1] = f[i - 1][0] + 1;
        }
    }
    long long res = 0;
    for(int i = 0; i < s.size(); i++)
        res += max(f[i][0], f[i][1]) / 2;
    cout << res << endl;
    return 0;
}
这算是DP入门吧。

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号