• How Many Equations Can You Find(dfs)


    How Many Equations Can You Find

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 714    Accepted Submission(s): 467


    Problem Description
    Now give you an string which only contains 0, 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9.You are asked to add the sign ‘+’ or ’-’ between the characters. Just like give you a string “12345”, you can work out a string “123+4-5”. Now give you an integer N, please tell me how many ways can you find to make the result of the string equal to N .You can only choose at most one sign between two adjacent characters.
     
    Input
    Each case contains a string s and a number N . You may be sure the length of the string will not exceed 12 and the absolute value of N will not exceed 999999999999.
     
    Output
    The output contains one line for each data set : the number of ways you can find to make the equation.
     
    Sample Input
    123456789 3 21 1
     
    Sample Output
    18 1

     题解,在一串数字内加+或-,使其等于N的方法数,深搜;

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 __int64 ans,N;
     4 int len;
     5 char s[15];
     6 void dfs(int t,__int64 sum){
     7     if(t==len){
     8         //printf("%I64d
    ",sum); 
     9         if(sum==N)ans++;
    10         return;
    11     }
    12     __int64 k=0;
    13     for(int i=t;i<len;i++){
    14         k=k*10+s[i]-'0';
    15         dfs(i+1,sum+k);
    16         if(t!=0)dfs(i+1,sum-k);
    17     }
    18 }
    19 int main(){
    20     while(~scanf("%s%I64d",s,&N)){
    21         len=strlen(s);
    22         ans=0;
    23         dfs(0,0);
    24         printf("%I64d
    ",ans);
    25     }
    26     return 0;
    27 }
    28 /*#include<stdio.h>
    29 #include<string.h>
    30 __int64 ans,N;
    31 int len;
    32 char s[15];
    33 void dfs(int top,__int64 sum){
    34     if(top==len){//写成N了错的心酸。。。 
    35         //printf("%I64d %d
    ",sum,len);
    36         if(sum==N)ans++;
    37         return ;
    38     }
    39     __int64 x=0;
    40     for(int i=top;i<len;i++){
    41         x=x*10+s[i]-'0';
    42         dfs(i+1,sum+x);
    43         if(top!=0)dfs(i+1,sum-x);
    44     }
    45 }
    46 int main(){
    47     while(~scanf("%s%I64d",s,&N)){
    48         len=strlen(s);
    49         //printf("%d
    ",len);
    50         ans=0;
    51         dfs(0,0);
    52         printf("%I64d
    ",ans);
    53     }
    54     return 0;
    55 }*/
  • 相关阅读:
    jQuery Easyui Datagrid相同连续列合并扩展
    Codeforces 240F. TorCoder 线段树
    java基础—Hashtable,HashMap,TreeMap的差别
    Android 屏幕适配扫盲、教程
    spring(13)------全面深入解析spring的AOP
    STL中的二分查找——lower_bound 、upper_bound 、binary_search
    闭包
    HDU 4193 Non-negative Partial Sums(单调队列)
    设计模式--基础学习总结
    代码坏味道特征反复的代码
  • 原文地址:https://www.cnblogs.com/handsomecui/p/4841324.html
Copyright © 2020-2023  润新知