当前位置: 首页 > 工具软件 > Nirvana > 使用案例 >

Codeforces - Nirvana

牟星火
2023-12-01

题目链接:Codeforces - Nirvana


爆搜,或者类似于一个数位dp。

枚举当前这一位是否能取到9,然后分是否取9转移。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
int n,a[20],cnt,dp[20][2];
int dfs(int pos,int lim){
	if(!pos) return 1;
	if(!lim&&dp[pos][lim]!=-1) return dp[pos][lim];
	if(lim) dp[pos][lim]=max(dfs(pos-1,1)*max(1,a[pos]),dfs(pos-1,0)*max(1,a[pos]-1));
	else dp[pos][lim]=dfs(pos-1,0)*9;
	return dp[pos][lim];
}
signed main(){
	cin>>n; memset(dp,-1,sizeof dp);
	while(n) a[++cnt]=n%10,n/=10;
	cout<<dfs(cnt,1);
	return 0;
}
 类似资料:

相关阅读

相关文章

相关问答