题目背景

non最近正在为自己的体重而苦恼,他想称量自己的体重。于是,他找来一个天平与许多砝码。

题目描述

砝码的重量均是n的幂次,n^1、n^2、n^3、n^4、n^5的……non想知道至少要多少个砝码才可以称出他的重量m。注意砝码可以放左边,也可以放右边。

输入输出格式

输入格式:

第一行一个正整数m,表示non的重量;

第二行一个正整数n,表示砝码重量幂次的底;

输出格式:

一个整数表示最少所需的砝码数。

输入输出样例

输入样例#1:

99
10
输出样例#1:

2

说明

【数据范围】

对于30%的数据点,m <= 2^63 - 1

对于100%的数据点,0 <= m <= 10^10000, 0 < n <= 10000

原题目也就等价于这样一个等式
k0*10^0+k1*10^1+k2*10^2+k3*10^3=99 这里我们假设左边就三项把 方便研究
k 的系数可正可负,正就是放在右边,负就是放在左边。
那么我们要求∑|k|最小,可以这样想: 我们先考虑最小的质量是 1 的砝码,我们要确定使用了几个 1
砝码,那么我们就要把个位的 9 补平,要么是 10-1,需要一个; 要么是 0+9,需要 9 个;

显然减一下好,而且减掉一个刚好。于是我们确定了上述方程的第一项系数 k0= -1
那么方程就是这样:-1*10^0+k1*10^1+k2*10^2+k3*10^3=99
把第一项移到右边:k1*10^1+k2*10^2+k3*10^3=100
我们看到我们成功的把个位填平了,使得方程可以同除以 10
那么就变成了 k1*10^0+k2*10^1+k3*10^2=10
于是到这里我们看到了问题具有很强的 最优子结构性质。
而无后效性是显然的,我们确定了小法码的个数后,右边的个位被填平,所以我们不在需要小法码

现在有一种贪心做法,每一次把它加或减变成最近的n倍数,再分解问题

但这样显然是有问题的,但有60分,已经接近了

正解是数位dp

我们将原数进制分解,假设第i位为p[i]

那么就有几种选择:

1.直接填入p[i]个数

2.填入n-p[i]个数(放在左边),然后第i+1位填入一个数弥补

我们设f[i][0/1]

前一维意思是处理到 n 进制
下的第 i 位,后一维意思是我们当前这一位的处理策略 0 代表直接拿出 p[i]这么多的砝码,1 代
表我们把当前位补平,进到下一位去

于是状态转移方程:
f[i][0]:=min(f[i-1][0]+p[i],f[i-1][1]+p[i]+1);
f[i][1]:=min(f[i-1][0]+n-p[i],f[i-1][1]+n-p[i]-1);

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long lol;
lol len,a[],cnt,n,p[],ans,f[][],c[];
int getMod()
{
lol s=,i;
for (i=len;i>=;i--)
{
s=s*+a[i];
s%=n;
}
return s;
}
void chu()
{lol sum;
int i;
sum=;
memset(c,,sizeof(c));
for (i=len;i>=;i--)
{
sum=sum*+a[i];
if (sum>=n)
{
c[i]=sum/n;
sum%=n;
}
else c[i]=;
}
memcpy(a,c,sizeof(a));
while (len&&a[len]==) len--;
}
int main()
{int i;
char ch=getchar();
while (ch<''||ch>'') ch=getchar();
len=;
while (ch>=''&&ch<='')
{
len++;
a[len]=ch-'';
ch=getchar();
}
cin>>n;
if (n==)
{
for (i=;i<=len;i++)
printf("%lld",a[i]);
cout<<endl;
return ;
}
reverse(a+,a+len+);
cnt=;
while (len)
{
p[++cnt]=getMod();
chu();
}
f[][]=;f[][]=;
for (i=;i<=cnt;i++)
{
f[i][]=min(f[i-][]+p[i],f[i-][]+p[i]+);
f[i][]=min(f[i-][]+n-p[i]-,f[i-][]+n-p[i]);
}
cout<<min(f[cnt][]+,f[cnt][]);
}

洛谷P2405 non天平的更多相关文章

  1. 洛谷P2474 [SCOI2008]天平

    P2474 [SCOI2008]天平 题目背景 2008四川NOI省选 题目描述 你有n个砝码,均为1克,2克或者3克.你并不清楚每个砝码的重量,但你知道其中一些砝码重量的大小关系.你把其中两个砝码A ...

  2. 洛谷2474 [SCOI2008] 天平 差分约束->枚举

    题目描述 你有n个砝码,均为1克,2克或者3克.你并不清楚每个砝码的重量,但你知道其中一些砝码重量的大小关系.你把其中两个砝码A 和B 放在天平的左边,需要另外选出两个砝码放在天平的右边.问:有多少种 ...

  3. 洛谷P4180 [Beijing2010组队]次小生成树Tree(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)

    洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...

  4. 洛谷P4180 [BJWC2010]次小生成树(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)

    洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...

  5. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  6. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  7. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  8. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  9. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

随机推荐

  1. 指令-arModal-点击提示框模板

    html 使用<ar-modal></ar-modal>: <ar-modal modal-obj="modalObj" ok="newAl ...

  2. 如何在jenkins上新建一个项目及其简单配置

    1.首先,点击[新建]进入选择页面,如下图(一般选择"构建一个自由风格的软件项目")     2.填好项目名称后,点击ok,跳转至如下页面,可以在这个页面进行项目的配置(包括拉源码 ...

  3. C语言——第二次作业

    **学习内容总结** 本周是国庆假期,学习了mooc相关课程.阅读了<提问的智慧>一文. 文章总结 1.在提问之前,要利用身边的资源(例如相关资料.FAQ.浏览器搜索)试着自己寻找答案,或 ...

  4. docopt——好用的Python命令行参数解释器

    Qingchat使用的命令行参数解释器是 docopt,用下来感觉非常棒,所以决定介绍一下这个库.( 奉劝各位看官,真爱生命,远离argparse. ) 介绍 docopt 本质上是在 Python ...

  5. Hibernate与mysql的对应类型

    Hibernate映射类型 Java类型 标准SQL类型  integer  java.lang.Integer  integer  long  java.lang.Long  bigint  sho ...

  6. vue中一个dom元素可以绑定多个事件?

    其实这个问题有多个解决方法的  这里提出两点 第一种 第二种 现在dom上绑定一个 然后在你的methods中直接调用 如果要传参数  这时候千万别忘记 原创 如需转载注明出处 谢谢

  7. 【转】Python处理wave文件

    #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在繁忙的生活 ...

  8. EasyUI导航栏。

    html: <div data-options="region:'west',split:true" title="导航栏菜单" style=" ...

  9. python 学习笔记

    1. 关于两者详细解释,参考链接:www.crifan.com/python_re_search_vs_re_findall/ 代码图

  10. 操作MP3文件的元数据

    参见:http://jingyan.baidu.com/article/03b2f78c4d5eae5ea237aee7.html 一.MP3文件的元数据 一个规则的MP3文件大致含有3个部分: TA ...