hdu 4277

2014-11-23 21:58:38 来源: 作者: 浏览: 7
#include  //by-ACMer_xiaohao
#include 
#include 
using namespace std;
#define N 50005 //不知道数组为什么开这么大
map mp[N];
int sum,n,ma[20],ans;
void dfs(int a,int b,int y)
{
    int c=sum-a-b;
    if(a>sum/3||a>c||b>c) return; //判重 把a看做最小的边
    if(y==n)
    {
        if(a>b)
            swap(a,b);
        if(a+b>c)
        {
            if(mp[a].find(b)==mp[a].end()) //找不到返回mp[a].end()
            {
                ans++;
                mp[a][b]=true;
            }

        }
        return;
    }
    dfs(a+ma[y+1],b,y+1);
    dfs(a,b+ma[y+1],y+1);
    dfs(a,b,y+1);
}
int main()
{
    int cas,i,j;
    scanf("%d",&cas);
    while(cas--)
    {
        for(i=0;i 
 

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: