您的位置:首页 > 其它

[简单DP] COJ 1122 Game

2012-08-07 07:13 225 查看
这道题直接模拟即可,DP相当于一个优化,记录下从第i行第j列出发后到达的最终位置,下次需要时直接取,优化前后最坏情况下复杂度都是O(10^6)。

# include <cstdio>
# include <cstring>

# define N 1000 + 5

int n, m;
int cnt
, ff
, f

;
char g

;

int down(int row, int col)
{
int &ans = f[row][col];
if (ans != -1) return ans;
if (row == n) return ans = col;
if (g[row][col] == '\\')
{
if (col+1>m || g[row][col+1]=='/') return ans = 0;
return ans = down(row+1, col+1);
}
if (g[row][col] == '/')
{
if (col-1<1 || g[row][col-1]=='\\') return ans = 0;
return ans = down(row+1, col-1);
}
return ans = down(row+1, col);
}

void solve(void)
{
for (int i = 1; i <= n; ++i)
memset(f[i]+1, -1, sizeof(int)*m);
for (int i = 1; i <= m; ++i)
{
ff[i] = down(1, i);
cnt[i] = 0;
}
int k, x;
scanf("%d", &k);
while (k--)
{
scanf("%d", &x);
++cnt[ff[x]];
}
printf("%d", cnt[1]);
for (int i = 2; i <= m; ++i)
printf(" %d", cnt[i]);
putchar('\n');
}

void read_graph(void)
{
for (int i = 1; i <= n; ++i)
scanf("%s", g[i]+1);
}

int main()
{
while (~scanf("%d%d", &n, &m))
{
read_graph();
solve();
}

return 0;
}


2WA,输出时把 n 当作 m 了,还以为是题目的下落方式没理解对。

一组数据:

------------------------input--------------------------------
5 5
_____
_\\__
__/__
_\___
_____
5 1 2 3 4 5

------------------------output------------------------------
1 0 1 2 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: