- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
解题思路
本题考查的是?数位DP?思想。
数位?是指把一个数字按照?个、十、百、千?等等一位一位地拆开,关注它每一位上的数字。如果拆的是十进制数,那么每一位数字都是?0~9,其他进制可类比十进制。
数位DP?:用来解决一类特定问题,这种问题比较好辨认,一般具有这几个特征:
要求统计满足一定条件的数的数量(即,最终目的为计数);
这些条件经过转化后可以使用「数位」的思想去理解和判断;
输入会提供一个数字区间(有时也只提供上界)来作为统计的限制;
上界很大(比如?10^12),暴力枚举验证会超时。
数位DP?的基本原理:
考虑人类计数的方式,最朴素的计数就是从小到大开始依次加一。但我们发现对于位数比较多的数,这样的过程中有许多重复的部分。例如,从?7000?数到?7999、从?8000?数到?8999、和从?9000?数到?9999?的过程非常相似,它们都是后三位从000?变到?999,不一样的地方只有千位这一位,所以我们可以把这些过程归并起来,将这些过程中产生的计数答案也都存在一个通用的数组里。此数组根据题目具体要求设置状态,用?递推?或?DP?的方式进行状态转移。
数位DP?中通常会利用常规计数问题技巧,比如把一个区间内的答案拆成两部分相减ans[l,r]=ans[0,r]?ans[0,l?1]。
那么有了通用答案数组,接下来就是统计答案。统计答案可以选择记忆化有哪些信誉好的足球投注网站,也可以选择循环迭代递推。为了不重不漏地统计所有不超过上限的答案,要从高到低枚举每一位,再考虑每一位都可以填哪些数字,最后利用通用答案数组统计答案。
我们从代码角度来理解?数位DP。
一般来说?数位DP?用记忆化有哪些信誉好的足球投注网站更容易编写。
intdfs(intpos,intsta,boolf1,boollead)
{
intcnt=popcount(sta);
if(pos==-1)returncnt==k!lead;
if(cntk)return0;
if(!f1dp[pos][cnt][lead]!=-1)returndp[pos][cnt][lead];
intup=f1?a[pos]:15,res=0;
for(inti=0;i=up;i++)
res=(res+dfs(pos-1,(!ilead)?sta:sta|(1i),f1i==up,lead!i))%mod;
return!f1?dp[pos][cnt][lead]=res:res;
}
popcount?是用来统计数字中?11?的数量,记忆化数组?dp_{i,j,k}dpi,j,k?设计成当前遍历到第?ii?位有?jj?个?11?且没有前导?00?符合题目要求的数字数量。
dfs?函数的参数分别是以下含义:
pos?:用来计算一共选了第几位。
std?:用一个?1010?进制数加位运算或统计当前用了几个?1616?进制数。
f1?:用来看是否有上界限制。
lead:用来看是否有前导?00。
intcnt=popcount(sta);
if(pos==-1)returncnt==k!lead;
if(cntk)return0;
if(!f1dp[pos][cnt][lead]!=-1)returndp[pos][cnt][lead];
前面这段部分就是?数位DP?正常的记忆化流程。
intup=f1?a[pos]:15,res=0;
该代码用于判断当前枚举位置上界。
for(inti=0;i=up;i++)
res=(res+dfs(pos-1,(!ilead)?sta:sta|(1i),f1i==up,lead!i))%mod;
return!f1?dp[pos][cnt][lead]=res:res;
以上代码用于枚举下一位,这里需要注意?sta|(1i)?是用来标记已经选了几个?1616?进制数。
综上,即可完成?数位DP?的记忆化有哪些信誉好的足球投注网站部分。
AC_Code
C++
#includeiostream
#includecstdio
#includecstring
#includealgorithm
#includecmath
#includevector
#includeset
#includemap
#includestack
#includequeue
#definelllonglong
#defineinf0x3f3f3f3f
#defineintll
#defineendl\n
#defineIOSio
您可能关注的文档
- 94、新一的神秘购物之旅.docx
- 96、小蓝的神秘行囊.docx
- 104树的着色问题.docx
- 109、艰苦打工的小蓝2.docx
- 115、单词数最多的关联文本.docx
- 128、苏苏的01字符串.docx
- 130、鳄鱼!水泡?大作战!.docx
- 133、你也喜欢幸运字符串吗?.docx
- 135、前缀数量大比拼.docx
- 136、小蓝的神秘日记.docx
- 抗逆力视角下个案工作介入精神障碍患者家庭的困境研究.docx
- 初中物理人教版八年级上册:密度与社会生活教学设计.docx
- 18 威尼斯的小艇 精华版教案.docx
- 房地产行业低配幅度扩大,龙头持仓减少——2024Q4地产基金持仓变化分析.docx
- 丝绸之路文化交流下舞蹈S形体态的变容.docx
- 第8课师生植树添新(教案)五年级上册信息技术泰山版.docx
- 2025精准扶贫脱贫知识考试题题库及参考答案(完整版).pptx
- 川2025G170-TY 《学校教学楼建筑用标准预制构件图集》.pdf
- 6-20 GHz超宽带集成化信号发生器射频通道设计与实现.docx
- 2025精准扶贫知识竞赛试题库(含参考答案).pptx
文档评论(0)