zoukankan      html  css  js  c++  java
  • HDU4403 DFS

    题意:给定一串数字,在这些数字钟插入一些‘+’或者'=' 使得两边相等

    思路:首先暴力出这个字符串中任意两个位置的表示的数的大小。。。。

    然后枚举等号的位置,两边进行dfs

    (dfs一开始实在是没思路。。借鉴http://blog.csdn.net/kk303/article/details/8008058)

    View Code
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 using namespace std;
     5 const int maxn = 24;
     6 char a[ maxn ];
     7 int num[ maxn ][ maxn ];
     8 int ans,len;
     9 int get_num( int x,int y ){
    10     int sum=0;
    11     int tmp=1;
    12     for( int i=y;i>=x;i-- ){
    13         sum+=( ( a[i]-'0' )*tmp );
    14         tmp*=10;
    15     }
    16     return sum;
    17 }
    18 void dfs_right( int y,int pre_sum,int now_sum,int mid ){
    19     if( y>len ){
    20         if( pre_sum==now_sum )
    21             ans++;
    22         return ;
    23     }
    24     for( int k=y;k<=len;k++ ){
    25         dfs_right( k+1,pre_sum,now_sum+num[y][k],mid );
    26     }
    27 }
    28 void dfs_left( int x,int sum,int mid ){
    29     //if( sum>num[ mid ][ len ] )
    30         //return ;//这个剪枝是错误的!!!
    31     if( x>=mid ) {
    32         //if( mid==6 )
    33             //printf("sum:%d\n",sum);//it is just for test
    34         dfs_right( mid,sum,0,mid );//pos,pre_sum,now_sum,mid
    35     }
    36     for( int k=x;k<mid;k++ )
    37         dfs_left( k+1,sum+num[x][k],mid );
    38 }
    39 int main(){
    40     while( scanf("%s",a+1)!=EOF ){
    41         if( a[1]=='E' ){
    42             break;
    43         }
    44         len=strlen( a+1 );
    45         memset( num,0,sizeof( num ) );
    46         for( int i=1;i<=len;i++ ){
    47             for( int j=i;j<=len;j++ ){
    48                 num[ i ][ j ]=get_num( i,j );
    49             }
    50         }// 获得 位置为 i,j 的数的值
    51         ans=0;
    52         for( int mid=2;mid<=len;mid++ ){//枚举等号的位置
    53             dfs_left( 1,0,mid );//pos,now_num,mid
    54         }
    55         printf("%d\n",ans);
    56     }
    57     return 0;
    58 }
    keep moving...
  • 相关阅读:
    更新数据库时日期字段为空显示为190011
    VB6封装DLL
    【转】Excel技巧收集
    数据透视表的计算字段
    站点地图与权限:Sitemap and Role
    asp:Menu导航菜单CSS
    单元格太窄的#号
    获得数据库中某个字段值
    第5周作业——如何在eclipse上配置tomcat harara
    第7周作业耦合性 harara
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2939099.html
Copyright © 2011-2022 走看看