题目来源:码蹄集https://matiji.net/exam/brushquestion/1/3181/1DC60EA6DF83A333301CFFE1407FBA59?from=1
参考程序:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
#define ll long long
#define N 10000
const ll inf = 0x3f3f3f3f;
ll d[6000], f[6000];
int main()
{
ll n;
cin >> n ;
for (ll i = 1; i <= n; ++i)
d[i] = 2 * d[i - 1] + 1;
for (ll i = 1; i <= n; ++i)
f[i] = inf;
for (ll i = 1; i <= n; ++i)
for (ll j = 0; j <= i; ++j)
f[i] = min(f[i], 2 * f[j] + d[i - j]);
for (ll i = 1; i <= n; ++i)
cout << f[i] << endl;
return 0;
}