C
通过反复尝试容易发现规律是n<=k+1时是Yes,n>=k+2时是No
F
暴力枚举线段树的三分点,然后记忆化搜索DP即可
#include<bits/stdc++.h> using namespace std; const int N=2e5+7; int n,f[N]; void dp(int l,int r) { if(f[r-l+1])return; int b=l+(r-l+1)/3-1,c=b+r>>1; dp(l,b),dp(b+1,c),dp(c+1,r); f[r-l+1]=1+f[b-l+1]+f[c-b]+f[r-c]; } int main() { int T;scanf("%d",&T); f[1]=1,f[2]=3; while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%*d"); dp(1,n); printf("%d\n",f[n]); } }
持续更新中……