权势二进制(51Nod 1413)】的更多相关文章

1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB  一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n. Input 单组测试数据. 第一行给出一个整数n (1<=n<=1,000,000) Output 输出答案占一行. Input示例 9 Output示例 9思路:完全背包刚刚装…
1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n. Input 单组测试数据. 第一行给出一个整数n (1<=n<=1,000,000) Output 输出答案占一行. Input示例…
1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 一个十进制整数被叫做权势二进制,当他的十进制表示的时候仅仅由0或1组成.比如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才干得到n. Input 单组測试数据. 第一行给出一个整数n (1<=n<=1,000,000) Output 输出答案占一行. Input演…
一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n. Input 单组测试数据.  第一行给出一个整数n (1<=n<=1,000,000) Output 输出答案占一行. Sample Input 9 Sample Output 9 题解:无论给的什么数,只要找到这个数中每个位中最大的那个数x就可以了,用x个数,每个数都是这么长度的,其他…
题意 : 一个十进制整数被叫做权势二进制, 当他的十进制表示的时候只由0或1组成.例如0, 1, 101, 110011都是权势二进制而2, 12, 900不是.当给定一个n (1<=n<=1,000,000)的时候, 计算一下最少要多少个权势二进制相加才能得到n. 分析 : 由于权势二进制可以在任意一位构造出1或者0, 那我就可以让每一位都在同时减1, 直到某一位变成0, 继续减其他位, 直到全部都等于0.例如 23303, 可以先构造11101进行相减, 使得除了零外的每一位都减1, 减两…
本来刚开始还是想用每一位 -1的个数 然后再乘以10  不断累加 后来发现 完全不是这回事啊  因为本身就是0 和 1 所以只要记录出现的最大的数字 就是答案  因为 n >= 1 // 所以不需要考虑 0 也是1的情况 #include<bits/stdc++.h> using namespace std; ]; int main() { ; cin >>s; int l=strlen(s); ;i<l;i++) { res = max(res,s[i]-'); }…
思路: 直接在串里找个最大的值就好了: #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <queue> using namespace std; const int INF=0x7fffffff; const int N=211; char a[N]; int main() { int ans=0; scanf("…
51Nod - 1413 权势二进制 题意:就是讲给出一个数n,让你求最少由多少个像0,1,10,11......这样的二进制数相加构成:样例n=9就是由9个二进制1相加组成,我不懂比赛的时候我为什么没有看懂题目在讲什么:再举个例子吧!n=2333 就有二进制1111,1111,111三个数相加而成: 代码: #include<iostream> #include<cstdio> #include<cmath> using namespace std; int main…
A.Parenthesis 括号匹配的问题有一种经典的做法. 将左括号看成1,右括号看成-1,做一遍前缀和sum. 括号序列是合法的当且仅当\(sum[n]=Min(sum[1],sum[2]....sum[n])=0\)时成立. 于是问题变成了交换两个括号后如何维护sum数组的值. 实际上交换a和b之后只会影响到\((sum[a],sum[a+1]....sum[b-1])\). 1.\(s[a]=(,s[b]=)\) 对应的区间减2. 2.\(s[a]=),s[b]=(\) 对应的区间加2.…
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1086 题解:怎么用二进制优化多重背包,举一个例子就明白了. 如果要放n个苹果,可以将n个苹果分成几个2的次方1,2,3,4,m^2然后n可以由这些按照某种组合来组合. 于是就知道怎么优化了. #include <iostream> #include <cstring> #include <cstdio> using namespac…