zoukankan      html  css  js  c++  java
  • 直线交点

    Description

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

    Analysis

    判断各个交点数的存在性,需要采用存在性动规的状态转移。

    i条直线的交点数要由j条直线转移(j<i)过来,那么i-j条直线一定要处于某种便于处理的状态。什么样的状态呢,不难想到平行,平行的各条直线无交点且与其他直线的交点数相等,便于状态转移。

    接下来就是转移方程的分析,对于j条直线存在k个交点,那么i-j条平行的直线每条一定与j条直线各有一个交点,所以i条直线就存在 (i-j)·j+k 个交点。

    dp[i][(i-j)·j+k]=dp[j][k]?1
    

    Code

    #include <bits/stdc++.h>
    
    int n,exist[21][401];
    
    int main(){
    	freopen("test.in","r",stdin);
    	freopen("test.out","w",stdout);
    	std::cin>>n;
    	exist[0][0]=1;
    	for(int i=1;i<=n;i++)
    		for(int j=0;j<i;j++)
    			for(int k=0;k<=j*(j-1);k++)
    				if(exist[j][k])exist[i][k+j*(i-j)]=1;
    	for(int i=0;i<=400;i++)
    		if(exist[n][i])std::cout<<i<<std::endl;
    	return 0;
    }
    
  • 相关阅读:
    web print
    datediff
    Typical AJAX
    sql中构建sql语句,再exec这条SQL语句
    ASP.NET中将数据输出到WORD、EXCEL、TXT、HTM
    sql中添加单引号
    sql语句批处理
    日期分组
    异步线程
    电脑内存大有什么好处?
  • 原文地址:https://www.cnblogs.com/qswx/p/9492571.html
Copyright © 2011-2022 走看看