算法1
我们把1~8的样例自己写一遍,就可以发现规律
1:1
2:2
3:2
4:3
5:3
6:3
7:3
8:4
……
我们会发现,次数是:1、2、4……
值是1、2、3……
我们就可以得出一下代码啦
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,c=1;
cin>>n;
while(n!=1){
n/=2;
c++;
}
cout<<c;
}
所以是怎么发现这种题有规律的·-·
闲来无事慢慢测样例
那正经解法该怎么做,我还准备dfs做第二题·-·
我好想又会了,记得之前做数学竞赛的一道题目,是说用f(x)表示非空集合S的所有元素的和,设A={a1,a2…a11}是正整数的集合,且a1<a2<…<a11又设对每个正整数n<=1500都存在A的子集S,使得f(S)=n,求a10的最小可能值,这题的答案我记得说是用二进制,我又结合了别的题解,感觉好像就是一样的题
所以说只要log2(n)向上取整+1就行了对吧
嗯
cout << (int)log2(n) + 1 << endl; 不香吗
怕有人不会劳格
其实就和多重背包的二进制优化一样
嗯
嗯,这不是我的思路吗??
欸对对对,我帮你补充一下hhh
谢谢