动态规划初步
题目链接:文字工作 - 洛谷
确定状态转移方程
f[n] = min(f[n-1]+1,f[n/2]+1)
n为第几个字
代码展示
#include <bits/stdc++.h>
#define int long long
#define ll long long
#define endl '\n'
using namespace std;
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
const int N = 1e6+5;
int f[N];
void solve()
{
int n;
cin>>n;
for(int i = 1;i<n;i++)
{
if((i+1)%2==0)
{
f[i+1] = min((f[i-1]+1),(f[(i+1)/2]+1));
}
else
{
f[i+1] = f[i]+1;
}
}
cout<<f[n]<<endl;
}
signed main(void)
{
solve();
return 0;
}