| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:poj1088 Time Limit ExceededIn Reply To:poj1088 Time Limit Exceeded Posted by:test_60 at 2011-05-11 22:44:07 超时了,加一个记忆搜索应该就可以了
> 一直提示这个,谁能给点提示,哪里的问题啊?谢谢了
> 代码:
>
> #include <stdio.h>
>
> int findroad(int (*R)[102], int r, int c, int i, int j)
> {
> int ret = 1;
> int tmp = 1;
> int max = 0;
> int cu = R[i][j]; //当前元素
> int t = R[i-1][j]; //上面
> int b = R[i+1][j]; //下面
> int l = R[i][j-1]; //左面
> int re = R[i][j+1]; //右面
> if (t < cu && t != 0)
> {
> tmp = findroad(R, r, c, i - 1, j);
> if (tmp > max)
> max = tmp;
> }
> if (b < cu && b != 0)
> {
> tmp = findroad(R, r, c, i + 1, j);
> if (tmp > max)
> max = tmp;
> }
> if (l < cu && l != 0)
> {
> tmp = findroad(R, r, c, i, j - 1);
> if (tmp > max)
> max = tmp;
> }
> if (re < cu && re != 0)
> {
> tmp = findroad(R, r, c, i, j + 1);
> if (tmp > max)
> max = tmp;
> }
> ret += max;
> return ret;
> }
> int main(int argc, char **argv)
> {
> int R[102][102] = {0};
> int r, c, i, j;
> int ret;
> int tmp;
> if (!scanf("%d %d", &r, &c))
> return -1;
> for (i = 1; i <= r; i++)
> {
> for (j = 1; j <= c; j++)
> {
> if (!scanf("%d", &R[i][j]))
> return -1;
> }
> }
> ret = 0;
> for (i = 1; i <= r; i++)
> {
> for (j = 1; j <= c; j++)
> {
> tmp = findroad(R, r, c, i, j);
> if (tmp > ret)
> ret = tmp;
> }
> }
> printf("%d\n", ret);
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator