对于某个数量的星星来说,它的连同的最小代价应该是将其折半后拼接,那么折半后折半下来的其余部分也按照这样折半的思路去,之后全部相加就是最小的代价。
//以星星为第一维,那么每加入一个星星能够得到的代价作为二维。 #include <bits/stdc++.h> using namespace std; #define int long long int dfs(int depth) { if (depth==0) return 0; if (depth==1) return 0; if (depth==2) return 0; if (depth==3) return 1; if (depth&1) { return dfs(depth/2)+dfs(depth/2+1)+1; } return dfs(depth/2)*2; } signed main() { int T; cin>>T; while (T--) { int n; cin>>n; cout<<dfs(n)<<endl; } return 0; }