题意:
给你一个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; }
时间: 2024-11-05 14:51:36