题意:
给你一个n,问你R(n)对应的字符串长度最小的是啥。
dp打个表出来,f(i)表示i值对应的字符串的最小长度,发现f(1)=1,f(2)=2,其他的情况下,若是偶数,则恰好在其外面加一对中括号,然后中间填i/2最优,若是奇数,恰好在i-1前面加个1最优。
于是递归输出答案即可。
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
string work(int x){
if(x==1){
return "1";
}
if(x==2){
return "11";
}
if(x%2==1){
return "1"+work(x-1);
}
else{
return "["+work(x/2)+"]";
}
}
int n;
int main(){
scanf("%d",&n);
cout<<work(n)<<endl;
return 0;
}