首页 > 代码库 > HDU 1466
HDU 1466
经典DP,这样的递推确实有点难。 把所有直线分成两组,可以知道
m条直线的交点方案数 =(m-r)条平行线与r条直线交叉的交点数 + r条直线本身的交点方案
亦就是 =(m-r)*r+r条之间本身的交点方案数(0<=r<m);
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 bool ans[25][250]; 6 7 int main(){ 8 memset(ans,false,sizeof(ans)); 9 for(int i=1;i<=20;i++){10 ans[i][0]=true;11 for(int r=0;r<=i;r++){12 for(int k=0;k<=r*(r-1)/2;k++)13 if(ans[r][k]){14 ans[i][(i-r)*r+k]=true;15 }16 }17 }18 int n;19 while(scanf("%d",&n)!=EOF){20 bool flag=false;21 for(int i=0;i<=n*(n-1)/2;i++){22 if(flag){23 if(ans[n][i])24 printf(" %d",i);25 continue;26 }27 else if(ans[n][i]){28 flag=true; printf("%d",i);29 }30 }31 printf("\n");32 }33 return 0;34 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。