A4991 | 多重背包二进制优化问题
时间限制1s
内存限制128MB
通过 / 提交0/0
题目描述
给定一个正整数 $n$,你需要选择一个数字集合 $S$,满足以下条件:
1. 对于任意整数 $x$($1 \leq x \leq n$),$x$ 都可以表示为 $S$ 中若干数字的和(每个数字最多使用一次);
2. 不能表示任何大于 $n$ 的整数。
求集合 $S$ 的最小可能大小。
$\large{数据范围}$
- $1 \leq T \leq 10^6$
- $1 \leq n \leq 10^9$
1. 对于任意整数 $x$($1 \leq x \leq n$),$x$ 都可以表示为 $S$ 中若干数字的和(每个数字最多使用一次);
2. 不能表示任何大于 $n$ 的整数。
求集合 $S$ 的最小可能大小。
$\large{数据范围}$
- $1 \leq T \leq 10^6$
- $1 \leq n \leq 10^9$
输入格式
第一行输入一个整数 $T$,代表测试样例数目。
接下来 $T$ 行,每一行输入一个整数 $n$。
接下来 $T$ 行,每一行输入一个整数 $n$。
输出格式
对于每一个测试用例,输出一个整数占一行表示答案。
输入输出样例
输入 #1
32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
输出 #1
1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6
样例解释:
当 $n = 1$ 的时候,只需要 $1$,就能表示出来。
当 $n = 2$ 的时候,只需要 $1, 1$, 就能表示 $1$ 到 $2$ 的所有数。
当 $n = 3$ 的时候,只需要 $1, 2$, 就能表示 $1$ 到 $3$ 的所有数。
当 $n = 4$ 的时候,只需要 $1, 2, 1$, 就能表示 $1$ 到 $4$ 的所有数。
当 $n = 5$ 的时候,只需要 $1, 2, 2$, 就能表示 $1$ 到 $5$ 的所有数。
当 $n = 6$ 的时候,只需要 $1, 2, 3$, 就能表示 $1$ 到 $6$ 的所有数。
当 $n = 7$ 的时候,只需要 $1, 2, 4$, 就能表示 $1$ 到 $7$ 的所有数。
当 $n = 8$ 的时候,只需要 $1, 2, 4, 1$, 就能表示 $1$ 到 $8$ 的所有数。
......
当 $n = 1$ 的时候,只需要 $1$,就能表示出来。
当 $n = 2$ 的时候,只需要 $1, 1$, 就能表示 $1$ 到 $2$ 的所有数。
当 $n = 3$ 的时候,只需要 $1, 2$, 就能表示 $1$ 到 $3$ 的所有数。
当 $n = 4$ 的时候,只需要 $1, 2, 1$, 就能表示 $1$ 到 $4$ 的所有数。
当 $n = 5$ 的时候,只需要 $1, 2, 2$, 就能表示 $1$ 到 $5$ 的所有数。
当 $n = 6$ 的时候,只需要 $1, 2, 3$, 就能表示 $1$ 到 $6$ 的所有数。
当 $n = 7$ 的时候,只需要 $1, 2, 4$, 就能表示 $1$ 到 $7$ 的所有数。
当 $n = 8$ 的时候,只需要 $1, 2, 4, 1$, 就能表示 $1$ 到 $8$ 的所有数。
......
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?