2 条题解

  • 1
    @ 2024-5-17 20:49:56

    超短代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,ans;
    bool p[10010];
    int g(int n,int k) {
    	if(n==0)p[k]=1;
    	else for(int i=n;i>=1;i--)g(n-i,i*(n-i)+k);
    }
    int main(){
    	scanf("%d",&n);
    	g(n,0);
        for(int i=0;i<=10009;i++)
            if(p[i])ans++;
    	cout<<ans;
    	return 0;
    }
    

    看完后点个赞❤️

    • 1
      @ 2024-5-9 13:32:12

      世界上最好的题解🍀 告诉各位一下,解析都在代码里了哟(●'◡'●)

      #include<bits/stdc++.h>
      using namespace std;
      bool a[310];
      void hello(int p,int sum){
      	a[sum]=true;//标记节点数量是存在的
      	if(p==0)return;//递归出口,如果0条直线就会返回
      	for(int i=p;i>=1;i--)//n条直线中,存在的平行线条数,都需要一个一个遍历一遍
      		hello(p-i,i*(p-i)+sum);
      }
      int main(){
      	int n,ans;
      	cin>>n;//输入
      	hello(n,0);//从n条直线,交点数量为0(就是全部平行)开始
      	for(int i=0;i<310;i++)ans+=a[i];//统计结果
      	cout<<ans;//输出结果
      	return 0;
      }
      

      看完别忘了点赞哟😁

      • 1

      信息

      ID
      1733
      时间
      1000ms
      内存
      125MiB
      难度
      4
      标签
      递交数
      3
      已通过
      2
      上传者