zoukankan      html  css  js  c++  java
  • HDU 4403 A very hard Aoshu problem (DFS暴力)



    题意:给你一个数字字符串。问在字符串中间加‘=’、‘+’使得‘=’左右两边相等。


    1212  : 1+2=1+2,   12=12。

    12345666 : 12+3+45+6=66。  1+2+3+4+56=66;

    #include<stdio.h>
    #include<string.h>
    #include<string>
    #include<map>
    #include<stack>
    #include<math.h>
    #include<queue>
    #include<vector>
    #include<stdlib.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define M 20005
    vector<int>Ga,Gb;
    char s[50];
    int l,len,ans;
    int a[M],b[M];
    int num[55][55];
    int get_num(int x,int y)
    {
    	int sum=0;
    	for(int i=x;i<=y;i++)
    		sum=sum*10+s[i]-'0';
    	return sum;
    }
    void dfs2(int i,int lsum,int rsum)
    {
    	if(i>=len)
    	{
    		if(lsum==rsum)
    			ans++;
    		return;
    	}
    	for(int k=i;k<len;k++)
    		dfs2(k+1,lsum,rsum+num[i][k]);
    }
    void dfs1(int i,int sum)
    {
    	if(i>=l)
    		dfs2(i,sum,0);
    	for(int k=i;k<l;k++)
    		dfs1(k+1,sum+num[i][k]);
    }
    int main()
    {
    	while(scanf("%s",s))
    	{
    		if(s[0]=='E')
    			break;
    		ans=0;
    		int i,j,k;
    		len=strlen(s);
    		for(i=0;i<len;i++)
    		{
    			for(j=i;j<len;j++)
    			{
    				num[i][j]=get_num(i,j);
    			}
    		}
    		for(int a=1;a<len;a++)
    		{
    			l=a;
    			dfs1(0,0);
    		}
    		printf("%d
    ",ans);	
    	}
    	return 0;
    }
    /*
    1212
    12345666
    1235
    */
    


  • 相关阅读:
    spring四种依赖注入方式
    java利用反射来调用一个类的私有方法
    IOC和AOP的基本概念
    开业大吉
    1752年9月奇怪的日历
    找到一个软件测试的学习网址,保留一下
    学习任务
    操作系统的第一次作业
    答题
    第四章读后感
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7232001.html
Copyright © 2011-2022 走看看