题目链接https://www.luogu.com.cn/problem/P1028
最刚开始没看懂题┭┮﹏┭┮
题意大概就是根据找数放在自身的左边,然后求出最多能生成多少不同的组合(含本身)
其中让我没明白的就是题意说不超过原数,和上一个被拼接的一半。其实原数也代表上一个被拼接的
其实也就是一个递推问题,并不难
比如 6 可以 放 36 然后 136 或者 26 126 或者 16 然后本身
可以枚举1-n/2 f[1]=1 f[2]=f[1]+1 f[3]=f[1] +1 f[n]=f[1]+至f[n/2]+1
数据不打,好像可以打表=.=,代码本身就打了表
#include<bits/stdc++.h>//万能头文件 using namespace std; int n; int f[1001];//存每一位数的种类 int main(){ cin>>n; for(int i=1;i<=n;i++){ //1-n的递推 for(int j=1;j<=i/2;j++){ f[i]+=f[j]; //每一位叠加,递推走起 } f[i]++; //加上本身 } cout<<f[n];//输出n的种类 return 0; }