比赛 |
2025暑期集训第7场 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Power Calculus |
最终得分 |
100 |
用户昵称 |
hsl_beat |
运行时间 |
4.424 s |
代码语言 |
C++ |
内存使用 |
3.65 MiB |
提交时间 |
2025-08-11 15:43:23 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n, dp[14];
int ans;
bool dfs(int x)
{
if (dp[x] == n) {
return 1;
}
if (x == ans) {
return 0;
}
int tp = dp[0];
for (int i = 1; i <= x; i++) {
tp = max(tp, dp[i]);
}
if ((tp << (ans - x)) >= n) {
for (int i = x; i >= 0; i--) {
dp[x + 1] = dp[x] + dp[i];
if (dfs(x + 1)) {
return 1;
}
dp[x + 1] = dp[x] - dp[i];
if (dfs(x + 1)) {
return 1;
}
}
}
return 0;
}
int main()
{
freopen("pow_cal.in", "r", stdin);
freopen("pow_cal.out", "w", stdout);
while (1) {
cin >> n;
if (n == 0) {
return 0;
}
if (n == 1) {
cout << 0 << '\n';
continue;
}
dp[0] = 1;
bool flag = 0;
for (ans = 1; ans <= 13; ans++) {
if (dfs(0)) {
cout << ans << '\n';
break;
}
}
}
return 0;
}