zoukankan      html  css  js  c++  java
  • spoj mgame

    题解:

    f[i][j]表示先后手最大差

    g[i][j]表示在最大差的时候是否有后手没得走

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=105;
    int n,m,q,x,y,a[N][N];
    double f[N][N];
    char s[105];
    int can(int x,int y){return x<=n&&y<=m&&a[x][y]>=0;}
    int main()
    {
        scanf("%d%d",&n,&m);
        gets(s);
        for (int i=1;i<=n;i++)
         {
            gets(s+1);
            for (int j=1;j<=m;j++)
             {
                if (s[j]=='.')a[i][j]=0;
                if (s[j]=='#')a[i][j]=-1;
                if (s[j]=='H'||s[j]=='C')a[i][j]=1;
                if (s[j]=='F'||s[j]=='S')a[i][j]=3;
                if (s[j]=='I'||s[j]=='B')a[i][j]=5;
             }
         }
        for (int i=n;i;i--)
         for (int j=m;j;j--)
          if (a[i][j]>=0)
           {
            int flag=1;
            double z=-1e10;
            if (can(i,j+1)) flag=0,z=max(z,a[i][j+1]-f[i][j+1]);
            if (can(i+1,j)) flag=0,z=max(z,a[i+1][j]-f[i+1][j]);
            if (can(i+1,j+1)) flag=0,z=max(z,a[i+1][j+1]-f[i+1][j+1]);
            f[i][j]=z;
            if (flag) f[i][j]=-0.5;
           }
        scanf("%d",&q);
        while (q--)
         {
            scanf("%d%d",&x,&y);
            printf("%s
    ",f[x][y]>0?"HAL":"DAVE");        
         }
        return 0;
    }
  • 相关阅读:
    字节码插桩技术
    排序算法
    oracle创建简单存储过程示例
    tomcat短连接与长连接的配置
    从linux到zookeeper
    拱卒人生
    集合运算
    读取properties
    oracle的那些事
    WebService
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/8857642.html
Copyright © 2011-2022 走看看