POJ 1950暴搜

思路:
暴力枚举好了。。每回判断一下……

用long long会超时
但是10^20会爆int。。。
不过仔细想一想 超过10^9的数肯定拼不回0啊……
猥琐用int AC了

(当然可以打表 )

// by SiriusRen
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int n,s[16],cnt=0,r[16];
void dfs(int t)
{
    if(t==n)
    {
        int ans=0,remain=n,num=0;
        for(int i=n-1;i;i--)
        {
            if(s[i]==1)
            {
                num=0;
                ans+=remain;
                remain=i;
            }
            else if(s[i]==2)
            {
                num=0;
                ans-=remain;
                remain=i;
            }
            else if(s[i]==3)
            {
                if(i<9)
                {
                    num++;
                    remain=remain+i*r[num];
                }
                else
                {
                    num+=2;
                    remain=remain+i*r[num];
                }
            }
        }
        ans+=remain;
        if(!ans)
        {
            cnt++;
            if(cnt<=20)
            {
                for(int i=1;i<n;i++)
                {
                    printf("%d",i);putchar(' ');
                    if(s[i]==1)putchar('+');
                    else if(s[i]==2)putchar('-');
                    else putchar('.');
                    putchar(' '); 
                }
                printf("%d
",n);
            }
        }
        return;
    }
    s[t]=1,dfs(t+1);
    s[t]=2,dfs(t+1);
    s[t]=3,dfs(t+1);
}
int main(){
    scanf("%d",&n);
    r[0]=1;
    for(int i=1;i<=9;i++)r[i]=r[i-1]*10;
    for(int i=10;i<=16;i++)r[i]=r[i-1];
    dfs(1);
    cout<<cnt;
}

这里写图片描述

15的数据:

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 - 10 - 11 - 12 - 13 - 14 + 15
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 - 9 + 10 - 11 - 12 - 13 + 14 - 15
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 - 9 - 10 + 11 - 12 + 13 - 14 - 15
1 + 2 + 3 + 4 + 5 + 6 + 7 - 8 + 9 + 10 - 11 - 12 + 13 - 14 - 15
1 + 2 + 3 + 4 + 5 + 6 + 7 - 8 + 9 - 10 + 11 + 12 - 13 - 14 - 15
1 + 2 + 3 + 4 + 5 + 6 - 7 + 8 + 9 + 10 - 11 + 12 - 13 - 14 - 15
1 + 2 + 3 + 4 + 5 + 6 - 7 - 8 - 9 + 10 - 11 - 12 - 13 + 14 + 15
1 + 2 + 3 + 4 + 5 + 6 - 7 - 8 - 9 - 10 + 11 - 12 + 13 - 14 + 15
1 + 2 + 3 + 4 + 5 + 6 - 7 - 8 - 9 - 10 - 11 + 12 + 13 + 14 - 15
1 + 2 + 3 + 4 + 5 + 6 - 7 - 8 . 9 + 10 + 11 + 12 + 13 + 14 + 15
1 + 2 + 3 + 4 + 5 + 6 . 7 - 8 . 9 - 10 - 11 + 12 - 13 + 14 + 15
1 + 2 + 3 + 4 + 5 + 6 . 7 . 8 - 9 . 10 - 11 . 12 + 13 . 14 + 15
1 + 2 + 3 + 4 + 5 - 6 + 7 + 8 + 9 + 10 + 11 - 12 - 13 - 14 - 15
1 + 2 + 3 + 4 + 5 - 6 + 7 - 8 + 9 - 10 - 11 - 12 - 13 + 14 + 15
1 + 2 + 3 + 4 + 5 - 6 + 7 - 8 - 9 + 10 - 11 - 12 + 13 - 14 + 15
1 + 2 + 3 + 4 + 5 - 6 + 7 - 8 - 9 - 10 + 11 + 12 - 13 - 14 + 15
1 + 2 + 3 + 4 + 5 - 6 + 7 - 8 - 9 - 10 + 11 - 12 + 13 + 14 - 15
1 + 2 + 3 + 4 + 5 - 6 - 7 + 8 + 9 - 10 - 11 - 12 + 13 - 14 + 15
1 + 2 + 3 + 4 + 5 - 6 - 7 + 8 - 9 + 10 - 11 + 12 - 13 - 14 + 15
1 + 2 + 3 + 4 + 5 - 6 - 7 + 8 - 9 + 10 - 11 - 12 + 13 + 14 - 15
1350

原文地址:https://www.cnblogs.com/SiriusRen/p/6532339.html