栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 2964 Tourist

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 2964 Tourist

#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define maxn 218#define max(a,b)    a>b?a:b;#define min(a,b)    a>b?b:a;#define inf 0x3f3f3f3fint dp[maxn][maxn][maxn];char map[maxn][maxn];int main(){    int t;    scanf("%d",&t);    while(t--)    {        memset(map,'#',sizeof(map));        int r,c;        scanf("%d%d",&c,&r);        for(int i = 0;i < r;i++) scanf("%s",map[i]);        int len = r+c-2;        for(int i = 0;i <= len;i++) for(int j = 0;j < r;j++)     for(int k = 0;k < r;k++)         dp[i][j][k] = -inf;        dp[0][0][0] = (map[0][0] == '*'?1:0);        for(int i = 0;i <= c;i++)    map[r][i] = '#';        for(int i = 0;i <= r;i++)    map[i][c] = '#';        for(int k = 0;k < len;k++)        { for(int i = 0;i <= k;i++) {     if(i >= r)    break;     if(k - i >= c)    continue;     for(int j = 0;j <= k;j++)     {         if(j >= r)    break;         if(k - j >= c)    continue;         if(dp[k][i][j] < 0 || map[i][k-i] == '#' || map[j][k-j] == '#')    continue;         if(map[i+1][k-i] != '#' && map[j+1][k-j] != '#')         {  int key = dp[k][i][j]+(map[i+1][k-i]=='*')+(map[j+1][k-j]=='*');  if(i == j && map[i+1][k-i] == '*')    key--;       dp[k+1][i+1][j+1] = max(dp[k+1][i+1][j+1],key);         }         if(map[i+1][k-i] != '#' && map[j][k+1-j] != '#')         {  int key = dp[k][i][j]+(map[i+1][k-i]=='*')+(map[j][k+1-j]=='*');  if(i+1 == j && map[i+1][k-i] == '*')    key--;  dp[k+1][i+1][j] = max(dp[k+1][i+1][j],key);         }         if(map[i][k+1-i] != '#' && map[j+1][k-j] != '#')         {  int key = dp[k][i][j]+(map[i][k+1-i]=='*')+(map[j+1][k-j]=='*');  if(i == j+1 && map[i][k+1-i] == '*')    key--;  dp[k+1][i][j+1] = max(dp[k+1][i][j+1],key);         }         if(map[i][k+1-i] != '#' && map[j][k+1-j] != '#')         {  int key = dp[k][i][j]+(map[i][k+1-i]=='*')+(map[j][k+1-j]=='*');  if(i == j && map[i][k+1-i] == '*')    key--;   dp[k+1][i][j] = max(dp[k+1][i][j],key);         }     } }        }        if(dp[r+c-2][r-1][r-1] < 0)    dp[r+c-2][r-1][r-1] = 0;        printf("%dn",dp[r+c-2][r-1][r-1]);    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/371738.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号