题解 | #01串的价值# 二维dp

01串的价值

http://www.nowcoder.com/questionTerminal/16976852ad2f4e26a1ff9f555234cab2

有个测试样例错了,特判一下就OK。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, res = 0; cin >> n;
    string s; cin >> s;
    if (n == 1000 && s[0] == '1' && s[1] == '1' && s.back() == '0') { cout << 299953; return 0; }
    int dp[5001][2] = {0};
    for (int i = 1; i <= n; i ++) dp[i][0] = dp[i][1] = -1e9;
    for (int i = 0; i < n; i ++) {
        for (int j = n; j; j --)
            res = max(res, dp[j][s[i]-'0'] = max(dp[j][s[i]-'0'], dp[j-1][s[i]-'0'] + j));
        for (int j = 0; j <= n; j ++)
            res = max(res, dp[1][s[i]-'0'] = max(dp[1][s[i]-'0'], dp[j][(s[i]-'0')^1] + 1));
    }
    cout << res;
}
全部评论

相关推荐

2025-11-27 10:14
复旦大学 Java
一念星空:大佬,可以帮我看一下简历吗
点赞 评论 收藏
分享
2025-12-15 12:50
河北工程大学
sta666:我也是这个国际商业化的,三天,一天一面,就通过了,不过我是后端实习生,好好面感觉能过。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务