• poj 1088


    初入dp界,好悲催,应该好好地做些动规的题了,

    用的是 记忆化搜索的方法,就是另开一个数组用来记录 处理过得数据,

    最后再搜索数组找到结果,不过对于我来说,怎么找这个循环节确实是个难题,从此要多锻炼了

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int map[105][105];
    int f[][2]={{1,0},{0,1},{-1,0},{0,-1}};//搜索上下左右四个方向
    int vis[105][105] ;//用来储存处理过的对应坐标的数据
    int m , n ;
    int dp ( int x , int y )
    {
    if ( vis[x][y] > 0 )
    return vis[x][y] ;
    int i ;
    int sum = 1 ;//如果数据都相同,则走一次到达,所以sum应该是1;
    for ( i = 0 ; i < 4 ; i ++ )
    {
    int a = x + f[i][0] ;
    int b = y + f[i][1] ;
    if(a >= 1 && a <= m && b >=1 && b <= n)
    {
    if(map[a][b] < map[x][y])
    sum = max ( sum , dp ( a , b ) + 1 ) ;//如果满足在数组范围中,且比原始坐标小,则进行下一次搜索,走的步奏同时加一;
    }

    }
    vis[x][y] = sum ;把这个坐标找到的最大步奏储存在标记数组的相同位置中
    return sum ;
    }
    int main()
    {
    int sum = 0;
    cin>>m>>n;
    int i , j ;
    for ( i = 1 ; i <= m ; i ++ )
    for ( j = 1 ; j <= n ; j ++ )
    cin >> map [i][j] ;
    for ( i = 1 ; i <= m ; i ++ )
    {
    for ( j = 1 ; j <= n ; j ++ )
    sum = max ( sum , dp ( i , j ) ) ;
    }

    cout << sum << endl ;
    }

  • 相关阅读:
    P3373 线段树模板
    由AC自动机引发的灵感
    瞎子摸象序
    Outer Join的where条件
    将 转移单 自动发货
    获取某个结点的所有层
    瞎子摸象库存篇
    js修改select列表选项中的值
    JS仿flash动态切换(横向,带分页器控制,自动正反向循环轮播)
    js操作select下拉列表的一些通用代码
  • 原文地址:https://www.cnblogs.com/lfyy/p/2755932.html
Copyright © 2020-2023  润新知