首页 > 其他分享 >P2657 [SCOI2009] windy 数 题解

P2657 [SCOI2009] windy 数 题解

时间:2024-09-15 21:56:13浏览次数:1  
标签:10 int 题解 windy numa numb P2657 dp

枚举、预处理,len-1位,len位但小于第一个数的这些都不讲了,看这篇题解 windy
讲一下贴近最高位的处理。
因为最高位如果取了,后面位数只能取到最高位,而不是9,而后面的数也是同理,所以我们的内部 $ \ j \ $ 循环枚举范围要把\(num_i\)单独拿出来判,单独拿出来的原因是好判break一些,因为已经不合法了,后面也必然不可能产生贡献了。

#include<bits/stdc++.h>
using namespace std;
int a,b;
long long ans;
int dp[15][11];
int numa[15],numb[15],l,r;
int main(){
	for(int i=0;i<=9;++i) dp[1][i]=1;
	for(int i=1;i<=11;++i){
		for(int j=0;j<=9;++j){
			for(int k=0;k<=9;++k)
				if(abs(j-k)>=2) dp[i][j]+=dp[i-1][k];
		}
	}
	scanf("%d %d",&a,&b);
	++b;
	while(a) numa[++l]=a%10,a/=10;
	while(b) numb[++r]=b%10,b/=10;
	for(int i=1;i<=l-1;++i){
		for(int j=1;j<=9;++j) ans-=dp[i][j];
	}
	for(int i=1;i<numa[l];++i) ans-=dp[l][i];
	for(int i=l-1;i>0;--i){
		for(int j=0;j<=numa[i]-1;++j){
			if(abs(j-numa[i+1])>=2) ans-=dp[i][j];
		}
		if(abs(numa[i]-numa[i+1])<2) break;
	}
	for(int i=1;i<=r-1;++i){
		for(int j=1;j<=9;++j) ans+=dp[i][j];
	}
	for(int i=1;i<numb[r];++i) ans+=dp[r][i];
	for(int i=r-1;i>0;--i){
		for(int j=0;j<=numb[i]-1;++j){
			if(abs(j-numb[i+1])>=2) ans+=dp[i][j];
		}
		if(abs(numb[i]-numb[i+1])<2) break;
	}
	printf("%lld",ans);
}

标签:10,int,题解,windy,numa,numb,P2657,dp
From: https://www.cnblogs.com/mountzhu/p/18415719

相关文章

  • AGC005D ~K Perm Counting 题解
    [AGC005D]~KPermCounting题解如果一个排列\(P\)满足对于所有的\(i\)都有\(|P_i-i|\neqk\),则称排列\(P\)为合法的。现给出\(n\)和\(k\),求有多少种合法的排列。由于答案很大,请输出答案对\(924844033\)取模的结果。\(2\leqn\leq2\times10^3\),\(1\leqk\leqn......
  • P2602 [ZJOI2010] 数字计数 题解
    数位dp的板子题?显然\([a,b]\)等价于\([0,b]-[0,a]\)。考虑\(dp_{i,j}\)表示到第\(i\)位数字\(j\)的答案。先不考虑数字大小限制(即1到999之类),则显然有\(dp_{i,j}=dp_{i-1,j}\times10+10^{i-1}。当前数字是0时则减去10^{i-1},再减去1。\)所以我们可以预处理出\(dp\),来表示后面......
  • 图:207课程表 题解:入度数组,邻接表,队列,拓扑排序
    207.课程表-力扣(LeetCode)没做出来,参考题解,这篇题解写的非常好。把一个有向无环图转成线性的排序就叫 拓扑排序。(没太懂这句话的意思)classSolution{public:boolcanFinish(intnumCourses,vector<vector<int>>&prerequisites){vector<int>inDegre......
  • 【题解】【动态规划】—— [NOIP2006 普及组] 开心的金明
    【题解】【动态规划】——[NOIP2006普及组]开心的金明[NOIP2006普及组]开心的金明题目描述输入格式输出格式输入输出样例输入#1输出#1提示1.题意解析2.AC代码2.1.二维d......
  • 【题解】【模拟】—— [NOIP2008 普及组] ISBN 号码
    【题解】【模拟】——[NOIP2008普及组]ISBN号码[NOIP2008普及组]ISBN号码题目描述输入格式输出格式输入输出样例输入#1输出#1输入#2输出#2提示1.思路解析2.AC代码[NOIP2008普及组]ISBN号码通往洛谷的传送门题目描述每一本正式出版的图书都有一个I......
  • 【题解】—— [NOIP2011 普及组] 数字反转
    【题解】——[NOIP2011普及组]数字反转[NOIP2011普及组]数字反转题目描述输入格式输出格式输入输出样例输入#1输出#1输入#2输出#2提示1.思路解析2.AC代码[NOIP2011普及组]数字反转通往洛谷的传送门题目描述给定一个整数......
  • 【题解】【枚举】——First Step (ファーストステップ)
    【题解】【枚举】——FirstStepファーストステップFirstStep(ファーストステップ)题目背景题目描述输入格式输出格式输入输出样例输入#1输出#1提示1.思路解析2.AC代码FirstStep(ファーストステップ)原题在洛谷上题目背景我们Aqours,要第一次举办演唱会啦......
  • 【题解】【数组】—— [NOIP2005 普及组] 校门外的树
    【题解】【数组】——[NOIP2005普及组]校门外的树[NOIP2005普及组]校门外的树题目描述输入格式输出格式输入输出样例输入#1输出#1提示1.题意解析2.AC代码[NOIP2005普及组]校门外的树通往洛谷的传送门题目描述某校大门外长度为......
  • 2024ICPC网络赛第一场题解(部分)
    这一场基本纯挂件,给队友翻译翻译题面,帮队友打打板子了,可惜最后40sL题冲了一个\(O(\frac{n^3}{w})\)的bitset最后wa了,所以下面的题解我也只能看着队友代码说说大概,主要参考一下代码吧。A题意给出32个队伍的能力值,和比赛的规则,其中中国队是第一个队伍,问所有分组的情况下,中国队......
  • 1928.规定时间内到达终点的最小话费,题解
    1928.规定时间内到达终点的最小花费-力扣(LeetCode)有点难,参考官方题解代码:利用了动态规划思想,逐步计算从起点到各个城市在不同时间下的最小费用。 1.代码解释,涉及,static关键字,constexpr关键字,INT_MAX除以2赋值的含义staticconstexprintINFTY=INT_MAX/2; 1.**`......