数学:洛谷P2789 直线交点数

原题传送门

等于说在求n=a+b+c+d+...(a<=b<=c...)的划分数,其中abcd各是某组平行线的数量,它们两两不平行。

数据规模比较小,直接递归求就行,thre是threshold的缩写,阈值

#include<bits/stdc++.h>
using namespace std;
bool ans[1003],t;
void f(int x,int s,int thre){//4=1+1+1+1=2+1+1=2+2=3+1=4 
    if(x<0) return;
    if(x==1||x==0) ans[s]=true;
    else{
        for(int i=thre;i>=1;i--){//枚举该种平行线数量 
            f(x-i,i*(x-i)+s,i);
        }
    }
}
int main(){
    int n,i,j,s;
    memset(ans,0,sizeof(ans));
    cin>>n;s=0;
    f(n,0,n);
    for(i=0;i<=1000;i++) if(ans[i]) s++;
    cout<<s;
    return 0;
}

 

posted @ 2021-11-07 20:14  遥望未来weilai  阅读(80)  评论(0)    收藏  举报