题解 | #函数求值#

函数求值

https://www.nowcoder.com/practice/20d6abf0fbcc49a799024e61fa2292c6

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

int main() {
   string s;
   while(cin >> s){

        int m = s.length(), dp[m][m];
        memset(dp, -1, sizeof(dp));
        function<int(int,int,bool)> f = [&](int i,int cnt2,bool ok)-> int {
             if (i == m) return cnt2%20123;
             if (!ok && dp[i][cnt2] >= 0) return dp[i][cnt2];
            int res = 0;
            for (int d = 0, up = ok ? s[i] - '0' : 9; d <= up; ++d) // 枚举要填入的数字 d
                {
                    res += f(i + 1, cnt2 + (d == 2 ||d == 1), ok && d == up);
                    res%=20123;
                }
            if (!ok) dp[i][cnt2] = res;
            return res;

        };
        cout<<f(0,0,true)<<endl;
    }
   
}
// 64 位输出请用 printf("%lld")

}// 64 位输出请用 printf("%lld")

全部评论

相关推荐

09-29 00:03
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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