ZOJ 4126 Digit Mode

这篇博客介绍了ZOJ 4126 Digit Mode问题的解决方案,主要采用数位动态规划(dp)的思想,枚举每个数字的状态并记录其出现次数。在面对前导零的处理时,博主提出通过预处理9, 99, 999等数字的答案来避免剪枝,从而降低了复杂度。通过这种优化,即使不做剪枝,代码也可能通过测试。" 129261038,15552791,使用Python3实现滑动验证码登录,"['Python', '前端开发', '开发语言', '验证码技术']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:https://zoj.pintia.cn/problem-sets/91827364500/problems/91827370521

用类似数位dp的思想去枚举每个状态,记录每个数字的出现次数,当后面的数组可以任意填时,就枚举答案,枚举每个数字的在后面的出现次数,做背包转移。有个细节是要考虑前导零。

设数字的长度为n,复杂度大概是n*10*O(dp转移的复杂度),n^4*10^3 ,实际上还要除一些常数,感觉大概可以过。

所以先写了一发,剪枝也一直T的代码。

后面把9,99,999...这样的数字的答案打表预处理,就不用考虑前导0的情况,复杂度大概能除2,不做剪枝大概也可以过....

#include<bits/stdc++.h>
#define debug(x) cerr<<#x<<" = "<<(x)<<endl
using namespace std;
typedef long long ll;
const int MAXN=(int)1e5+5;
const int MOD=(int)1e9+7;
string s;
int a[55],n;
ll comb[55][55];
int dp[55],tmp[55];
int ti[10];
ll ans;
int tbl[]=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值