码迷,mamicode.com
首页 > 其他好文 > 详细

计蒜客课程竞赛入门--统计三角形 代码流程摘记

时间:2016-06-09 21:01:28      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int n,l[15];//n:木棍数量,l数组:每根木棍长度
 6 bool h[10000];
 7 /*
 8 因为三条边长度是确定的,所以确定两条边就可以,且,这个数组是用哈希表来储存
 9 储存方式为第一条边长度*100+第二条边长度,最高位99*100+99=9999,故存10000
10 */
11 bool is_triangle(int a,int b,int c)
12 {
13   return !h[a*100+b]&&a&&b&&c&&a+b>c&&a+c>b&&b+c>a&&(h[a*100+b]=true);      
14 }//两边之和大于第三边,之前判断是判断是否已经进行过判断,判断后将该处置为true
15 
16 //dfs深度搜索来枚举所有情况
17 int dfs(int index,int a,int b,int c)//index:边界条件,当index等于总木柴数跳出递归
18 {
19   if(index==n)
20   { 
21     return a<b&&b<c&&is_triangle(a,b,c);  
22   }         
23   return dfs(index+1,a+l[index],b,c)
24            +dfs(index+1,a,b+l[index],c)
25            +dfs(index+1,a,b,c+l[index]);  
26 }
27 int main()
28 {
29    int T;
30    scanf("%d",&T); 
31    while(T--)
32    {
33       scanf("%d",&n);
34       for(int i=0;i<n;++i)
35        {
36           scanf("%d",&l[i]); 
37        }
38        memset(h,0,sizeof(h));//0为false,即为计算过
39        printf("%d\n",dfs(0,0,0,0));
40    } 
41   return 0;  
42 }

2012年ACM长春赛区现场赛一道题简化而来

计蒜客课程竞赛入门--统计三角形 代码流程摘记

标签:

原文地址:http://www.cnblogs.com/beSunshine/p/5572658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!