HDU-1466 计算直线的交点数 DP

来源:互联网 发布:云计算实训 编辑:程序博客网 时间:2024/04/30 04:05

题目链接


#include <stdio.h>#include <string.h>#include <queue>#include <algorithm>using namespace std;const int maxn = 5005;int n;int dp[25][200];        //dp[i][j] 表示i个点j个交点的状态存在与否void init(){    memset(dp,0,sizeof(dp));    for( int i = 0; i <= 20; i ++ )        dp[i][0] = 1;    for( int i = 1; i <= 20; i ++ )   //遍历边    {            for( int j = 0; j < i; j ++ )    //遍历平行边条数        {            for( int k = 0; k < 191; k ++ )    //交点个数                if( dp[i-j][k] == 1 )                    dp[i][(i-j)*j+k] = 1;        }    }}int main(){    init();    while( scanf("%d",&n) != EOF )    {        printf("0");        for( int i = 1; i <= 190; i ++ )        {            if( dp[n][i] == 1 )                printf(" %d",i);        }        puts("");    }    return 0;}


0 0
原创粉丝点击