从现在开始,我会为大家讲解题库中的题目,核心代码会发出,会因为题目的难度升高而降低更新速度甚至不更新,谢谢大家的支持
3 个赞
我先讲讲A+B,转化题意 1 ~ a 数字的个数+ 1 ~ b 数字的个数,那么考虑用数位dp,相信大家都会这里就直接代码了。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a,b,n,v[105],dp[105][105];
int dfs(int now,int last,bool zero,bool limit)
{
int ans=0;
if(zero&&!now) return 0;
if(!now) return 1;
if(!zero&&!limit&&dp[now][last]!=-1) return dp[now][last];
int up=(limit?v[now]:9);
for(int i=0;i<=up;++i)
{
if(zero&&!i) ans+=dfs(now-1,-2,1,limit&(i==up));
else ans+=dfs(now-1,i,0,limit&(i==up));
}
if(!zero&&!limit) dp[now][last]=ans;
return ans;
}
int work(int x)
{
n=0;
while(x!=0)
{
v[++n]=x%10;
x/=10;
}
return dfs(n,-2,1,1);
}
signed main()
{
memset(dp,-1,sizeof(dp));
cin>>a>>b;
if(a<0||b<0) cout<<a+b;
else cout<<work(a)+work(b);
return 0;
}
1 个赞
基本上是一天一题
1 个赞
从P1000开始
1 个赞
P???
1 个赞
什么意思?
1 个赞
第二赞
1 个赞
是信友队题库中的题目!!
洛谷的查找题目写多了
没有P
确实,还有B
还有CF,SP,AT,UVA