zoukankan      html  css  js  c++  java
  • Additive equations(和式)

    zoj 1204

    题目大意:给出一些数字,求出某几个数字之和等于给出的某一个数字 ,并按照要求输出

    解决: 排序,dfs

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int num[35];
    bool flag;
    int res[35],n;
    
    void dfs(int start,int dest_deep,int current_deep,int current_sum)
    {
        if(current_deep==dest_deep)
        {
            if(binary_search(num,num+n,current_sum))
            {
                printf("%d",res[0]);
                for(int i=1;i<dest_deep;i++)
                printf("+%d",res[i]);
                printf("=%d\n",current_sum);
                flag=true;
            }
        }
        else 
        {
            for(int i=start;i<n-1;i++)
            {//下边这个if判断使得超时的程序,变为150ms,差别就是这么明显
                if(current_sum+num[i]<=num[n-1])
                {
                    res[current_deep]=num[i];
                    dfs(i+1,dest_deep,current_deep+1,current_sum+num[i]);
                }//下边这个else break语句使得删除后310ms变为150ms,剪枝是多么重要啊
                else break;
            }
        }
    }
    int main()
    {
        int i,j,k,icase;
        scanf("%d",&icase);
        while(icase--)
        {
            scanf("%d",&n);
            for(i=0;i<n;i++)scanf("%d",&num[i]);
            sort(num,num+n);
            flag=false;
            for(int step=2;step<n;step++)
            {//step表示多少个数的和,从2......n-1
                dfs(0,step,0,0);
            }
            if(!flag)puts("Can't find any equations.");
            printf("\n");
        }
    //    system("pause");
        return 0;
    }
    

  • 相关阅读:
    厕所惊魂
    感谢协助学生返校,邀请交警合影留念
    小丑杀人
    东芝Toshiba e-STUDIO打印身份证
    JavaScript
    html
    pymysql模块
    线程
    队列与进程池
    网络编程
  • 原文地址:https://www.cnblogs.com/hpustudent/p/2132128.html
Copyright © 2011-2022 走看看