转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1466
2 3
0 1 0 2 3
代码如下:
#include <cstring> #include <iostream> using namespace std; #define N 21 #define M (N-1)*N/2 int dp[N][M]; //dp[i][j] i是有i条直线 j代表交点个数 void solve() { int m = 0; memset(dp,0,sizeof(dp)); dp[0][0] = 1,dp[1][0] = 1; for(int i = 2; i <= 20; i++) { for(int k = 0; k < i; k++) { for(int j = 0; j <= k*(k-1)/2; j++) { if(dp[k][j]) { m = j+k*(i-k); dp[i][m] = 1;//标记 } } } } } int main() { int n; solve(); while(~scanf("%d",&n)) { printf("0"); for(int i = 1; i <= n*(n-1)/2; i++) { if(dp[n][i]) { printf(" %d",i); } } printf("\n"); } return 0; }
hdu1466 计算直线的交点数(找规律+数学),布布扣,bubuko.com
原文:http://blog.csdn.net/u012860063/article/details/37530747