Add One(数位dp)

题目
题意
一次操作是将这个数的每一位都加一。求将 n 进行 m 次操作后有几位。
思路
每一次操作只对当前位数有影响,所以可以一位一位考虑。
可以发现,每一位本来是一位数,如果变成两位数,那么一定是9+1=10,变成了1和0两位。
这样就可以只考虑对1和0进行操作了。
dp[i][j]表示当前位置的数字是i,进行j次操作之后获得的位数
如果i+j<10,那么操作之后还是一位。
如果i+j>=10,那么操作之后就变成两位,一位是1,一位是0。而从i到10需要10-i步,还剩j-(10-j)=i+j-10步。
所以状态转移方程为
如果i+j<10,dp[i][j]=1;
如果i+j>=10,dp[i][j]=dp[0][i+j-10]+dp[1][i+j-10];
代码如下

#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=2e5+5;
const int mod=1e9+7;
typedef long long ll;
int dp[10][maxn];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    for(int i=0;i<10;i++)
        dp[i][0]=1;
    for(int j=1;j<=maxn;j++)
        {
            for(int i=0;i<10;i++)
            {
                if(i+j>9)
                    dp[i][j]=(dp[0][i+j-10]+dp[1][i+j-10])%mod;
                else
                    dp[i][j]=1;
            }
        }
        int t;
        cin>>t;
        while(t--)
        {
            ll ans=0;
            int n,m;
            cin>>n>>m;
            while(n)
            {
                ans+=dp[n%10][m];
                ans%=mod;
                n/=10;
            }
            cout<<ans<<endl;
        }

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贝叶斯分类是一种基于贝叶斯定理的机器学习算法,用于进行分类任务。它假设特征之间是相互独立的,并根据输入样本的特征概率来计算后验概率,从而确定样本属于各个类别的可能性,并选择后验概率最大的类别作为分类结果。 贝叶斯分类的计算过程可以简单描述为以下几个步骤: 1. 收集训练集:收集包含已知类别标签的训练样本,以及样本的特征。 2. 计算先验概率:计算各个类别的先验概率,即每个类别的样本占总样本的比例。 3. 计算条件概率:根据训练样本,计算每个特征在每个类别下的条件概率。 4. 计算后验概率:使用贝叶斯定理,结合先验概率和条件概率,计算每个类别在给定特征下的后验概率。 5. 预测分类结果:选择后验概率最大的类别作为样本的分类结果。 而"add one"计算题是指在统计学中常用的平滑算法之一。在计算频率时,如果某个事件在样本中没有出现过,根据统计学的原则,其频率应该为0。但是在实际应用中,为了避免概率为0导致后续计算出错的情况,可以使用"add one"平滑算法。 "add one"平滑算法的计算方式是:在每个事件的频率上加上一个常数α,即将每个事件的频数加1,然后再进行频率的计算。这样做可以有效地解决概率为0的问题,并且避免出现负数的情况。 例如,有一个样本集合包含三个类别的数据,每个类别的频数分别为0、2和3。使用"add one"平滑算法后,每个类别的频数分别为1、3和4,这样就可以计算每个类别的概率。 总结来说,贝叶斯分类是一种基于贝叶斯定理的分类算法,通过计算特征和类别之间的概率关系来进行分类。而"add one"计算则是一种在统计学中常用的平滑算法,用于解决频率为0的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值