zoukankan      html  css  js  c++  java
  • 2019牛客多校第四场K number dp or 思维

    number

    题意

    给一个数字串,问有几个子串是300的倍数

    分析

    dp写法:这题一看就很dp,直接一个状态dp[i][j]在第i位的时候膜300的余数是j左过去即可。这题比赛的时候样例老是少1,后面发现是中间忘记加上了,铁憨憨,以后一定要冷静,分析状态,找到少的那部分。

    #include<bits/stdc++.h>
    #include<vector>
    #include<algorithm>
    using namespace std;
    #define pb push_back
    #define F first
    #define S second
    #define mkp make_pair
    const int maxn=1e5+5;
    typedef long long ll;
    char s[maxn];
    ll dp[maxn][305];
    int main(){
        int n,m;
        scanf("%s",s+1);
        int len=strlen(s+1);
        ll sum=0;
        for(int i=1;i<=len;i++){
            dp[i][int(s[i]-'0')]++;
            for(int j=0;j<300;j++){
            //  cout<<i<<" "<<(int(s[i]-'0')+j*10)%300<<" "<<dp[i-1][j]<<endl;
     
                dp[i][(int(s[i]-'0')+j*10)%300]+=dp[i-1][j];
            }
            sum+=dp[i][0];
        }
        //cout<<dp[2][60]<<" "<<dp[2][0]<<" "<<dp[3][0]<<endl;
        cout<<sum<<endl;
        return 0;
    }
    
  • 相关阅读:
    直接插入排序
    直接选择排序
    冒泡排序
    归并排序
    进程调度
    进程与线程
    c语言struct和c++struct的区别
    二叉搜索树、AVL平衡二叉搜索树、红黑树、多路查找树

    6-11 先序输出叶结点
  • 原文地址:https://www.cnblogs.com/ttttttttrx/p/11396170.html
Copyright © 2011-2022 走看看