zoukankan      html  css  js  c++  java
  • hdu5612 Baby Ming and Matrix games (dfs加暴力)

    Baby Ming and Matrix games

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 849    Accepted Submission(s): 211


    Problem Description
    These few days, Baby Ming is addicted to playing a matrix game.

    Given a nm matrix, the character in the matrix(i2,j2) (i,j=0,1,2...) are the numbers between 09. There are an arithmetic sign (‘+’, ‘-‘, ‘’, ‘/’) between every two adjacent numbers, other places in the matrix fill with ‘#’.

    The question is whether you can find an expressions from the matrix, in order to make the result of the expressions equal to the given integer sum. (Expressions are calculated according to the order from left to right)

    Get expressions by the following way: select a number as a starting point, and then selecting an adjacent digital X to make the expressions, and then, selecting the location of X for the next starting point. (The number in same place can’t be used twice.)
     
    Input
    In the first line contains a single positive integer T, indicating number of test case.

    In the second line there are two odd numbers n,m, and an integer sum(1018<sum<1018, divisor 0 is not legitimate, division rules see example)

    In the next n lines, each line input m characters, indicating the matrix. (The number of numbers in the matrix is less than 15)

    1T1000
     
    Output
    Print Possible if it is possible to find such an expressions.

    Print Impossible if it is impossible to find such an expressions.
     
    Sample Input
    3 3 3 24 1*1 +#* 2*8 1 1 1 1 3 3 3 1*0 /#* 2*6
     
    Sample Output
    Possible Possible Possible
    Hint
    The first sample:1+2*8=24 The third sample:1/2*6=3
    题意:在这个矩阵内是否可以找到一个表达式的值等于sum;
    思路:dfs找到所有的表达式,暴力一发;
    AC代码:
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    double sum;
    int t,n,m,flag;
    int vis[100][100],dir[4][2]={-2,0,2,0,0,2,0,-2};
    double num[100][100];
    char s[100][100];
    int dfs(int x,int y,double ans)
    {
        vis[x][y]=1;
        if(fabs(ans-sum)<=0.000000001)flag=1;
        for(int i=0;i<4;i++)
        {
           int fx=x+dir[i][0],fy=y+dir[i][1];
           int px=x+dir[i][0]/2,py=y+dir[i][1]/2;
           if(fx>=1&&fx<=n&&fy<=m&&fy>=1&&vis[fx][fy]==0&&s[fx][fy]!='#')
           {
               if(s[px][py]=='+')
               dfs(fx,fy,ans+num[fx][fy]);
               else if(s[px][py]=='*')
                dfs(fx,fy,ans*num[fx][fy]);
               else if(s[px][py]=='-')
                dfs(fx,fy,ans-num[fx][fy]);
               else if(s[px][py]=='/'&&num[fx][fy]!=0)
                dfs(fx,fy,ans/num[fx][fy]);
           }
        }
        vis[x][y]=0;
        return 0;
    }
    int main()
    {
        scanf("%d",&t);
        while(t--)
        {
            flag=0;
            memset(vis,0,sizeof(vis));
            memset(num,-1,sizeof(num));
            scanf("%d%d%lf",&n,&m,&sum);
            for(int i=1;i<=n;i++)
            {
                scanf("%s",s[i]+1);
            }
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    if(s[i][j]>='0'&&s[i][j]<='9')
                    {
                        num[i][j]=s[i][j]-'0';
                    }
                }
            }
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    if(s[i][j]>='0'&&s[i][j]<='9')
                    {
                        dfs(i,j,num[i][j]);
                    }
                }
            }
            if(flag)printf("Possible
    ");
            else printf("Impossible
    ");
        }
        return 0;
    }
  • 相关阅读:
    iOS的生命周期
    【iOS开发】在 App 中加入 AdMob 广告
    iOS性能优化:Instruments
    动态的计算行高 加载数据源 有多少显示多少 tableView 包含 colloctionView 显示复杂的界面写法
    Java String.split()注意点
    Java eclipse export jar包 包括第三方引入的jar
    微信网页授权获取用户基本信息
    android连接本地tomcat服务器,报timeout
    iOS内存管理retain,assign,copy,strong,weak
    static与全局与局部变量的区别
  • 原文地址:https://www.cnblogs.com/zhangchengc919/p/5161861.html
Copyright © 2011-2022 走看看