HDU 4277 USACO ORZ 2012 ACM/ICPC Asia Regional Changchun Online 1011

就是给N(N<=15)个线段,用这N个线段组成一个三角形,问能组成多少种三角形。

水题,爆搜即可,时间复杂度3^15。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>

using namespace std;

int ncase;
int n;
int arr[20];
set<long long>col;

void dfs(int a, int b, int c, int cur)
{
    if (cur==n)
    {
        if (a>b||b>c||a>c) return;
        if (a&&b&&c&&a+b>c)
        {
            long long t = 1000000000000LL*a+1000000LL*b+c;
            col.insert(t);
        }
        return;
    }
    dfs(a+arr[cur],b,c,cur+1);
    dfs(a,b+arr[cur],c,cur+1);
    dfs(a,b,c+arr[cur],cur+1);
}

int main()
{
    while (EOF!=scanf("%d", &ncase))
    {
        while (ncase--)
        {
            col.clear();
            scanf("%d", &n);
            for ( int i = 0 ; i < n ; i++ )
                scanf("%d", arr+i);
            dfs(0,0,0,0);
            printf("%d\n", col.size());
        }
    }
    return 0;
}

posted on 2012-09-08 20:56 purplest 阅读(580) 评论(1)  编辑 收藏 引用 所属分类: 搜索

评论

# re: HDU 4277 USACO ORZ 2012 ACM/ICPC Asia Regional Changchun Online 1011 2013-06-11 20:46 sdc1992

因为三边和是固定的,所以在压缩三角形三边时标记两条边(如:最长边和最短变)就可以……  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

常用链接

留言簿

随笔分类(70)

随笔档案(68)

ACMer

搜索

最新随笔

最新评论