Small Multiple(变相最短路/双向队列)

传送门

题意:

题目很短就是给你一个N,然后要找一个N的倍数,需要他们的每一位数之和最小。

请输出最小值,如   6   , 12=2*6. 此时可以得到3.

题解:

这个题,本来我也是划水的,真的没看到什么规律可言,但是细心的Passer_by看出来。

其实这个题目就是问一个怎么通过从1开始走达到N的倍数的问题。

可以有两个操作:

  • 操作一:可以加1          %n
  • 操作二:可以乘以10    %n

这不就是我们以前BFS的思想吗?

以前不是有BFS那一类通过  向左走x步,向右做y步,最后操作多少次能得到答案。

这个不就是以前的思想吗?一模一样。但是题解除了给了BFS这种想法外还给了,建图的做法。

这个想法不太一样,就是通过某一个点加1之间的权值就是1,某一点*10.权值是10;

从1开始跑一个最短路得到答案。

代码主要参考网上的:

/*if you ask me how much i love you
the moonlight stand for my heart*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
pair<int,int>p;
deque< pair<int,int> >
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值