zoukankan      html  css  js  c++  java
  • POJ 1088解题报告

    本来十分简单的一道题,可却花了我那么长时间。测试了各种数据都是对的,一提交就WA,郁闷死了!!!

    后来才发现是search()函数中的temp[4]没有初始化。。。

    改成 int temp[4]={0}后就AC了。。。。

    244K 16MS C++ 907B

    解题思路:(DP)动态规划备忘录法递归求解。

    dp[i][j]=1+max{dp[i+1][j],dp[i-1][j],dp[i][j+1],dp[i][j-1]};

    避免重复,将计算过的dp[i][j]保存下来,下次直接查询而不再求解。

    以下是源代码:

    #include<stdio.h>
    int dp[101][101]={0};
    int r[101][101]={0};
    int main()
    {
     int search(int i,int j,int m,int n);
     int m,n,i,j;
     while(scanf("%d %d",&m,&n)!=EOF)
     {
      for(i=0;i<m;i++)
       for(j=0;j<n;j++)
       {
        r[i][j]=0;//记得初始化
        scanf("%d",&dp[i][j]);
       }
      int max=0,temp;
      for(i=0;i<m;i++)
       for(j=0;j<n;j++)
       {
        temp=search(i,j,m,n);//求以每个节点为起点的最长长度,然后求出整体最长长度
        if(temp>max)
         max=temp;
       }
      printf("%d\n",max);
     }
     return 1;
    }
    int search(int i,int j,int m,int n)//求以某个节点为起点的最长长度
    {
     if(r[i][j])//若该值存在,则直接返回,不再递归,避免重复
      return r[i][j];
     int temp[4]={0};//这儿一定要初始化,否则就WA了

    int max=0;
     if(i+1<m&&dp[i+1][j]<dp[i][j])
         temp[0]=search(i+1,j,m,n);
     if(i-1>=0&&dp[i-1][j]<dp[i][j])
         temp[1]=search(i-1,j,m,n);
     if(j+1<n&&dp[i][j+1]<dp[i][j])
         temp[2]=search(i,j+1,m,n);
     if(j-1>=0&&dp[i][j-1]<dp[i][j])
         temp[3]=search(i,j-1,m,n);
     for(int k=0;k<4;k++)
      if(temp[k]>max)//若temp不初始化为0,则这儿出错
       max=temp[k];
      r[i][j]=max+1;
      return r[i][j];
    }

  • 相关阅读:
    图算法(一)——基本图算法(BFS,DFS及其应用)(1)
    设置drawable图片
    view的加载
    onSaveInstanceState和onRestoreInstanceState
    android中的生命周期(新增2个函数)
    int integer string间的转换
    andorid中Html.fromHtml方法
    android获取inflater
    android中获取string字符串的方法
    c#基础试题
  • 原文地址:https://www.cnblogs.com/ltfbk/p/DP.html
Copyright © 2011-2022 走看看