社区讨论

dp的题爆搜过了???

P2657[SCOI2009] windy 数参与者 3已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@lo1i3hhp
此快照首次捕获于
2023/10/22 21:24
2 年前
此快照最后确认于
2023/11/24 17:19
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;

int a,b;
int f[20][20],num[15];

inline int dfs(int now,int last,bool zero,bool maxx){
	if(now==0) return 1;
//	if(f[now][last]!=-1&&!zero&&!maxx) return f[now][last];
	int ans=0,maxn=maxx?num[now]:9,p;
	for(int i=0;i<=maxn;i++){
		if(abs(i-last)<2) continue;
		p=i;
		if(zero&&i==0) p=-10;
		ans+=dfs(now-1,p,(i==0)&&zero,maxx&&(i==maxn));
	}
//	if(!zero&&!maxx) f[now][last]=ans;
	return ans;
}

inline int solve(int x){
	memset(num,0,sizeof(0));
	int len=0;
	memset(f,-1,sizeof(f));
	while(x) num[++len]=x%10,x/=10;
	return dfs(len,-10,1,1);
}

int main(){
	scanf("%d%d",&a,&b);
	printf("%d",solve(b)-solve(a-1));
	return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...