原题传送门
思路:列举出前几个例子m[1]=1, m[2]=2, m[3]=2, m[4]=4就不难看出m[n]=m[1]+…+m[n/2]+1这样的规律来,因此用递推的思路来做即可
代码参考
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1001;
int m[MAXN],n;
int main(){
cin>>n;
//从1-n按规律递推
for(int i = 1;i <= n;i++){
for(int j = 1;j <= i/2;j++)
m[i]+=m[j];
m[i]++;//加上自然数自身
}
cout<<m[n];
return 0;
}