• NC50 E


    这什么垃圾数据一堆贪心的我随手就能卡掉。
    我们考虑dp
    先考虑有多少段叭,然后考虑每一段是不是0,
    然后就得到递推式
    如果当前串是0
    dp[i][0]=dp[i-1][0]+dp[i-1][1],//我们把这个0拿出来,与前面所有的方案都形成一种新方案
    dp[i][1]=dp[i-1][1];//直接拼上去
    如果不是0
    dp[i][0]=0;
    dp[i][1]=dp[i-1][1]*2+dp[i-1][0];//对于dp[i-1][1]来说拼或者不拼,对于dp[i-1][0]来说只能不拼。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll mod = 998244353;
    int n;string s;
    bool ning[100005];int cnt=0;
    ll dp[100005][2];
    int main(){
        ios::sync_with_stdio(false);
        cin>>n>>s;s="*"+s;
        int tmp=0,len=0;
        for(int i=1;i<=n;i++){
            tmp=(tmp+s[i]-'0')%3;
            len++;
            if(!tmp){
                ning[++cnt]=(len==1&&s[i]=='0');
                len=0;
            }
        }
        if(tmp)cout<<0<<endl;
        else{
            dp[0][0]=1;dp[0][1]=0;
            for(int i=1;i<=cnt;i++){
                if(ning[i]){
                    dp[i][1]=dp[i-1][1];
                    dp[i][0]=(dp[i-1][0]+dp[i-1][1])%mod;
                }else{
                    dp[i][0]=0;
                    dp[i][1]=(dp[i-1][1]*2+dp[i-1][0])%mod;
                }
            }
            cout<<(dp[cnt][0]+dp[cnt][1])%mod;
        }
    }
    
  • 相关阅读:
    WCF进行大数据传输时的相关配置(转)
    自定义绑定(转)
    菜鸟学TSQLSQL2005读书笔记1
    再别康桥英文及译文
    自定义绑定2
    我要读的书
    菜鸟学TSQLSQL2005读书笔记
    Bad Habbits
    实践测试驱动开发
    针对接口写测试用例
  • 原文地址:https://www.cnblogs.com/MXang/p/11404756.html
Copyright © 2020-2023  润新知