首页 > 其他分享 >AT_dp_s 题解

AT_dp_s 题解

时间:2023-05-16 14:14:58浏览次数:46  
标签:int 题解 pos 枚举 text res dp

题目传送门

第一道数位 \(\text{dp}\),检验一下自己懂没懂。

特别感谢 \(\text{yinhee}\) 大佬,他的讲解令我受益匪浅。

题目分析

\(dp_{pos,res,lim}\) 为当前枚举到从高位往低位数第 \(pos\) 位,数字和取模后的余数为 \(res\) 时的方案数,其中 \(lim\) 可以理解为一个布尔值,\(0\) 表示没有到上限,\(1\) 表示到了上限。

然后是一个数位 \(\text{dp}\) 的板子,我特别讲一下这一行代码:

tot+=dfs(pos-1,(res+i)%d,(lim!=0)&&(i==maxx));

其中 \(maxx\) 是当前枚举位可选的最大值。

这里就是在枚举第 \(pos-1\) 位,选择了 \(i\) 作为这位的数,\(res+i\) 就是新的数字和。而后面的判断条件就是在看枚举到目前为止,该数是否还与 \(k\) 的前缀相同,是就说明到目前为止还是最大的,否则就不是。

贴上代码

#include<bits/stdc++.h>
// #define int long long
#define ok printf("1")
#define no printf("0")
using namespace std;
int read(){
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-48;
		c=getchar();
	}
	return x*f;
}
const int mod=1e9+7;
const int maxn=10010;
const int maxm=110;
int n,d;
int a[maxn];
int dp[maxn][maxm][2];
string s;
int dfs(int pos,int res,int lim){
	if(pos==0){
		if(res==0) return 1;
		else return 0;
	}
	if(dp[pos][res][lim]!=-1) return dp[pos][res][lim];
	int maxx=9,tot=0;
	if(lim!=0) maxx=a[pos];
	for(register int i=0;i<=maxx;++i){
		tot+=dfs(pos-1,(res+i)%d,(lim!=0)&&(i==maxx));tot%=mod;
	}
	dp[pos][res][lim]=tot;
	return tot;
}
inline void init(){
	cin>>s;n=s.size();
	cin>>d;
	for(register int i=0;i<n;++i) a[n-i]=s[i]-48;
	memset(dp,-1,sizeof(dp));
}
int main(){
	init();
	printf("%d",(dfs(n,0,1)-1+mod)%mod);
}

标签:int,题解,pos,枚举,text,res,dp
From: https://www.cnblogs.com/yizhixiaoyun/p/17405449.html

相关文章

  • abc260_g Scalene Triangle Area 题解
    题目传送门题意给定一个大小为\(n\timesn\)的字符矩阵,每个字符为X或者O。对于一个位于\((x,y)\)的字符o和一个格子\((u,v)\),如果满足以下条件,那么\((u,v)\)就可以被\((x,y)\)控制。\(x\leqslantu\leqslantn\),\(y\leqslantv\leqslantn\)。\((u-x)+\fr......
  • 前端传递参数与后端接收的类属性不一致问题解决办法
    使用@JsonAlias作用是在反序列化的时候可以让Bean的属性接收多个json字段的名称。可以加在字段上或者getter和setter方法上。publicclassUser{ @JsonAlias({"name","user"}) privateStringusername; privateStringpassword; privateIntegerage;}这样子......
  • m基于归一化最小和译码算法的LDPC误码率性能仿真,对比不同的迭代次数,量化位宽以及归
    1.算法仿真效果matlab2022a仿真结果如下:      2.算法涉及理论知识概要        LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究热点。它的性能逼近......
  • m基于归一化最小和译码算法的LDPC误码率性能仿真,对比不同的迭代次数,量化位宽以及归
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究热点。它的性能逼近香农极限,且描述和实现简单,易于进行理论分......
  • JOISC 2018 题解
    没做计算几何题和提交答案题。JOISC2018Day1ConstructionofHighway道路建设注意到题目中的操作相当于就是到根的路径染色,我们离线下来进行树剖,每条重链维护连续段,然后显然均摊会修改\(O(n\logn)\)段。我们每次修改时可以取出所有连续段,然后题目问逆序对数,我们对这些连续......
  • P1433 吃奶酪-状压dp
    P1433吃奶酪-状压dp这是5.15晚自习的题目预习直接上题逝一逝吧放心,是对的代码P1433吃奶酪-洛谷|计算机科学教育新生态(luogu.com.cn)记录详情-洛谷|计算机科学教育新生态(luogu.com.cn)我真喜欢记忆化搜索(嘿嘿嘿)记忆化搜索的话,更容易理解dp[x][zt]设定为走到......
  • ORA-02049:超时:分布式事务处理等待锁 问题解决
    数据库添加DBLink后,很容易出现一个问题:ORA-02049:超时:分布式事务处理等待锁ORA-02063:紧接着line(起自ODS_LINK) 问题原因分析:第一次执行操作后出错,数据库没有提交或回退,未关闭原有数据库窗口,重新打开新窗口执行数据插入操作,报ORA-02049错误。解决办法:数据库登陆管理员账号查看1、......
  • UDP通信 广播 组播
    #UDP通信  #server.c#include<stdio.h>#include<string.h>#include<arpa/inet.h>#include<stdlib.h>#include<unistd.h>intmain(){intlfd=socket(AF_INET,SOCK_DGRAM,0);char*ip_buf="192.168.248.1......
  • 跨域问题解决记录Access-Control-Allow-Origin方法
      more_set_headers 'Access-Control-Allow-Origin: http://devops.opsenv.com';    more_set_headers 'Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS';    more_set_headers 'Access-Control-Allow-Headers: Authorization,DNT,......
  • el-popover无法弹出的问题解决
    1、不能再el-popover上⾯使⽤v-if进⾏显⽰隐藏,应该⽤v-show2、在每⼀个el-popover上都增加⼀个ref确定每个el-popover都是唯⼀的,:ref="`node-popover-${scope.row.id}`"3、需要使⽤slot="reference"定义由哪个元素触发事件。除此之外,还有一种特殊情况就是在table使用el-popover也......