题解:P2789 直线交点数

· · 题解

参考资料

题意简述

平面上有 n 条直线,且无三线共点,求这些直线有多少种可能的交点数。

解题思路

此问题可以转化为 完全背包 问题:

时间复杂度为 O(n^3)

参考代码

#include <bits/stdc++.h>
using namespace std;

const int inf=0x3f3f3f3f;
const int N=1005;
int f[N];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin>>n;
    int m=n*(n-1)/2;
    for(int i=1;i<=m;i++)f[i]=inf;
    for(int j=2;j<=n;j++)
    {
        int w=j*(j-1)/2;
        for(int i=w;i<=m;i++)f[i]=min(f[i],f[i-w]+j);
    }
    int ans=0;
    for(int i=0;i<=m;i++)if(f[i]<=n)ans++;
    cout<<ans<<'\n';
    return 0;
}