http://acm.hdu.edu.cn/showproblem.php?pid=1466
如果有n条直线,最多可有n*(n-1)/2个交点。
如果i条线可以相加出j个交点,那么记f[i][j]=1;否则f[i][j]=0。
*当n=1时,方案为0
*当n=2时,方案为0,1
*当n=3时,方案为0,2,3
*当n=4时,4条平行:方案为0
*3条平行:方案为3
*2条平行:方案为4,5
*1条平行:方案为6
*。。。
*当n=k时,k条平行:方案为0
*k-1条平行:方案为k-1
*k-2条平行:方案为2*(k-2)+0,2*(k-2)+1
*k-3条平行:方案为3*(k-3)+0,3*(k-3)+2,3*(k-3)+3
*。。。
*k-i条平行:方案为{i*(k-i)+u}(k>i,f[i][u]=1)
@当有k条线时,将k条线分成(k-i)条平行线和i条非平行线。平行线与非平行线之间有i*(k-i)个交点,然后再加上i条非平行线之间的交点即为总交点数。而这里的u为i条线时的交点数,包括平行和非平行因此以上的方案有重复,但因为我们只统计有可能出现的方案,因此不会影响到最后的输出。
#include<stdio.h>
#include<string.h>
#define N 20
#define M N*(N-1)/2
int f[N+1][M+1];
int main()
{
int n,i,j,k,m;
memset(f,0,sizeof(f));
f[0][0]=1;
f[1][0]=1;
for(k=2;k<=N;k++){
for(i=0;i<k;i++){
for(j=0;j<=i*(i-1)/2;j++){
if(f[i][j]){
m=i*(k-i)+j;
f[k][m]=1;
}
}
}
}
while(scanf("%d",&n)!=EOF){
for(i=0;i<=n*(n-1)/2;i++){
if(f[n][i])
printf(i==0?"%d":" %d",i);
}
printf("\n");
}
return 0;
}
分享到:
相关推荐
关于hdu的动态规划的题目,包括一些水题,还有一些经典的动态规划题目。
HDU 动态规划(46道题目
动态规划DP题解 POJ HDU部分动态规划DP题解
hdu动态规划算法集锦
HDU的一题........HDU DP动态规
hdu acm 教案 动态规划(1) hdu acm 教案 动态规划(1)
HDU动态规划,此PPT系杭州电子科技大学ACM总教练刘春英老师所有, 特在此分享贡献给广大编程爱好者, 特别是ACMer!
这是一个相当齐全的算法课件 里面包含了很多的内容和实例 使我们上课时老师的课件 希望对大家有帮助
动态规划入门,hdu上的动态规划入门题的结题报告。 hdu 1171,hdu 1059,hdu 2159,hdu 2191,hdu 3496
杭电ACM课件2014版之 (HDUACM201403版_05)动态规划
动态规划DP题解 POJ HDU 动态规划解题报告
(lecture_04)动态规划(1)_ (lecture_05)计算几何基础_ (lecture_06)母函数 (lecture_7)特殊的数 (lecture_8)组合博弈入门 (lecture_09贪心算法 (lecture_11)搜索入门 (lecture_12)二分匹配及其应用 ...
算法设计与分析实验六:使用动态规划算法解决存钱问题(java实现、hdu1114)(csdn)————程序
HDU的1250,主要是利用高精度加法,但是代码有点繁琐,效率不是很高
杭电ACMhdu1163
HDU1059的代码
hdu1001解题报告
hdu 1574 passed sorce
hdu ACM 各种排序
hdu 一些简单题目 ac代码 大概100道