zoukankan      html  css  js  c++  java
  • 2020牛客多校(六) Harmony Pairs(数位dp)

    类比2019南昌区域赛c题,发现也是个二维数位dp,我们发现差值不可能超过+-1000,并且位数一共100位,因此可以列出状态方程

    这题还需要考虑a<b,因此多枚举一位表示当前是否已经小于b

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int mod=1e9+7;
    string s;
    ll f[105][2005][2][2][2];
    string t;
    int len;
    ll dfs(int u,int sum,int sign1,int sign2,int flag){
        if(u==len){
            return sum>1000;
        }
        auto &x=f[u][sum][sign1][sign2][flag];
        if(x!=-1)
            return x;
        int up1=9;
        int up2=9;
        if(sign1){
            up1=t[u]-'0';
        }
        if(sign2){
            up2=t[u]-'0';
        }
        int i,j;
        ll res=0;
        for(i=0;i<=up1;i++){
            for(j=0;j<=up2;j++){
                if(!flag&&i>j)
                    continue;
                res+=dfs(u+1,sum+(i-j),sign1&&(i==up1),sign2&&(j==up2),flag||i<j);
                res%=mod;
            }
        }
        return x=res;
    }
    ll solve(string s){
        t=s;
        len=t.size();
        memset(f,-1,sizeof f);
        return dfs(0,1000,1,1,0);
    }
    int main(){
        ios::sync_with_stdio(false);
        cin>>s;
        cout<<solve(s)<<endl;
    }
    View Code
    没有人不辛苦,只有人不喊疼
  • 相关阅读:
    UVa LA 2965
    UVa LA 3695
    UVa LA 3029 City Game 状态拆分,最大子矩阵O(n2) 难度:2
    Uva LA 3177
    Uva LA 3902
    Uva 11520
    UVa Live 3635
    python学习笔记-day05 字典
    python学习笔记-day04 元组
    python学习笔记 day04 列表增删改查
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13389840.html
Copyright © 2011-2022 走看看