穷举法和搜索法的统计三角形

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,l[15];
bool h[10000];
bool is_triangle(int a,int b,int c)
    {
    return !h[a * 100 + b] && a && b && c && a+b>c && a+c>b  && b+c>a && (h[a*100+b] = true);
}

int dfs(int index, int a,int b ,int c)
    {
    if (index ==n){
      return a<b && b<c && is_triangle(a,b,c);
    }

    return dfs(index +1, a+l[index],b,c) +dfs(index +1 ,a,b+l[index],c)+dfs(index+1,a,b,c+l[index]);
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        for(int i = 0; i< n; ++i)
        {
            scanf("%d",&l[i]);
        }
        memset(h,0,sizeof(h));
        printf("%d\n",dfs(0,0,0,0));
    }
    return 0;
}
时间: 2024-08-06 11:56:28

穷举法和搜索法的统计三角形的相关文章

for循环、穷举法和迭代

循环:初始条件,循环条件,状态改变,循环体.for(初始条件;循环条件;状态改变){ 循环体}for(int i=1;i<=10;i++){ }例子:100以内与7有关的数.求100以内所有数的和. break;——中断循环,跳出循环.——吃到苍蝇了 continue;——停止本次循环,进入下次循环.——吃到沙子了. 循环嵌套:循环里面再套循环. ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● 作业:1.打印乘法口决表.2.打印以

for循环的应用:迭代法和穷举法

for()循环.四要素:初始条件,循环条件,状态改变,循环体.执行过程:初始条件--循环条件--循环体--状态改变--循环条件....注意:for的小括号里面分号隔开,for的小括号后不要加分号.for的嵌套.应用:迭代法,穷举法.一.迭代法:有一定规律. 每次循环都是从上次运算结果中获得数据,本次运算的结果都是要为下次运算做准备. 二.穷举法:用循环把各种可能的情况都给走一遍,然后用if条件把满足要求的结果给筛选出来.

迭代法和穷举法

迭代法:每次循环都要把某一个或多个变量不断放大,为的是下一次循环可以继续使用,最后达到最终的大小.代表性的题:1.累加求和2.阶乘3.折纸int sum = 0;for(int i=1;i<=10;i++){ sum += i;} 穷举法:将所有的可能性都走一遍,然后判断符合条件的可能性,单独拿出来.基本用法:int count = 0;for (int i = 1; i <= 15; i++) //1分的硬币{ for (int j = 1; j <= 7; j++)//2分的硬币 {

作业:for循环,迭代法和穷举法

                                                for()循环 四要素:初始条件,循环条件,状态改变,循环体. 执行过程:初始条件--循环条件--循环体--状态改变--循环条件.... 注意:for的小括号里面用分号隔开,for的小括号后不要加分号. for的嵌套. 应用:迭代法,穷举法. 一.迭代法:有一定规律. 每次循环都是从上次运算结果中获得数据,本次运算的结果都是要为下次运算做准备. 第一题:求100以内所有数的和. 第二题:求阶乘!(6的

1-5、算法设计常用思想之穷举法

穷举法又称穷举搜索法,是一种在问题域的解空间中对所有可能的解穷举搜索,并根据条件选择最优解的方法的总称.数学上也把穷举法称为枚举法,就是在一个由有限个元素构成的集合中,把所有元素一一枚举研究的方法. 使用穷举法解决问题,基本上就是以下两个步骤: • 确定问题的解(或状态)的定义.解空间的范围以及正确解的判定条件: • 根据解空间的特点来选择搜索策略,逐个检验解空间中的候选解是否正确: 解空间的定义解空间就是全部可能的候选解的一个约束范围,确定问题的解就在这个约束范围内,将搜索策略应用到这个约束范

循环嵌套,while循环,穷举迭代循环

一.循环嵌套 简单的就是说,在一个for循环里嵌入多个小for循环. 其中,在打矩形.三角形和乘法口诀表之类的题目中,大for循环一般表示的是行数,其余的小for循环式每一行中的内容. 二.while循环 1,格式 (1) 初始条件: while(循环条件) { 循环体: 状态改变: } 当循环体不满足循环条件时,才能跳出所处的for循环. (2) 初始条件: do { 循环体: 状态改变: } while(循环条件) 其表示才开始不管满不满足循环条件,限制性一次,如果不符合循环条件,就跳出循环

企业级循环处理方案-减少穷举

在生产环境下面对纷繁的业务处理场景,我们知道要处理很多逻辑代码,其中有个叫枚举(也称穷举),当处理这类事务时,会产生大量的循环执行,而循环是最耗CPU的,大量的迭代计算,可直接拉低计算速度,怎么处理这类问题呢? 对于事务的不定项的选择几率,都会有一定的规律,比如说事件的概率发生,根据概率论的知识,我们可以去统计穷举各项的频率,按其大小依次排列,这样前面的枚举项就可消费大部分数据,剩下的低概率枚举项就会以最小的执行次数执行. 比如说有1000000条数据,枚举项有50个,假如平均25次能找到匹配项

for的嵌套与迭代、穷举与 while

for嵌套 //for循环的嵌套 //打印矩阵 //for (int k = 1; k <= 5; k++) //{ // for (int i = 1; i <= 5; i++) // { // Console.Write("■"); // } // Console.WriteLine(); //} //打印左下角是直角的三角形 //for (int i = 1; i <= 5; i++) //{ // for (int j = 1; j <= i; j++)

【算法设计与分析基础】8、穷举 旅行商问题

package cn.xf.algorithm.ch03; import java.util.LinkedList; import org.apache.commons.lang.StringUtils; import org.junit.Test; /** * * 功能:穷举 旅行商问题 * @author xiaofeng * @date 2017年4月26日 * @fileName TravelingSalesmanProblem.java * */ public class Travel