• hdu 2084


    //Time Limit Exceeded                              普通递归     自顶向下

    #include <iostream>
    #define N 105      
    #include<string.h>
    using namespace std;
    int a[N][N];
    int n;
    int max(int x, int y)
    {  return x>y?x:y   ;      }

    int maxsum(int i,int j)
    {
     if(i==n-1)  return a[i][j];                                                  //最后一行   终止条件  出口
     return a[i][j]+max(maxsum(i+1,j),maxsum(i+1,j+1));                        //a[i][j]   自己本身       ,,,,,
    }                                                                                             //下一行   其中的 最大值      max(  maxsum(i+1,j)   ,  maxsum(i+1,j+1)    )

    int main()
    {
      int c ;
     int i,j;
     cin>>c;
     while(c--)
     {
      cin>>n ;
      for(i=0;i<n;i++)
        for(j=0;j<=i;j++)  cin>>a[i][j];
       
      
             cout<<maxsum(0,0)<<endl;
     }
     
    }

    #include <iostream>
    #define N 105      
    #include<string.h>
    using namespace std;
    int a[N][N];
    int n;
    int s[N][N];
    int max(int x, int y)
    {  return x>y?x:y   ;      }

    int maxsum(int i,int j)
    {
     if(i==n-1)            return s[i][j]=a[i][j];
                        return s[i][j]=a[i][j]+max(maxsum(i+1,j),maxsum(i+1,j+1));                                     //不知道是否算过
    }

    int main()
    {
      int c ;
     int i,j;
     cin>>c;
     while(c--)
     {
      cin>>n ;
      for(i=0;i<n;i++)
        for(j=0;j<=i;j++)  cin>>a[i][j];
       
      
             cout<<maxsum(0,0)<<endl;
     }
     
    }

    ******************************************************************************88

                         记忆式搜索

    #include <iostream>
    #define N 105      
    #include<string.h>
    using namespace std;
    int a[N][N];
    int n;
    int s[N][N];
    int max(int x, int y)
    {  return x>y?x:y   ;      }

    int maxsum(int i,int j)
    {
     if(i==n-1)    return s[i][j]=a[i][j];
         else if(s[i][j]!=-1)  return s[i][j];
         return s[i][j]=a[i][j]+max(maxsum(i+1,j),maxsum(i+1,j+1));
    }

    int main()
    {
      int c ;
     int i,j;
     cin>>c;
     while(c--)
     {
        memset(s,-1,sizeof(s));
      cin>>n ;
      for(i=0;i<n;i++)
        for(j=0;j<=i;j++)  cin>>a[i][j];
       
      
             cout<<maxsum(0,0)<<endl;
     }
     
    }

    hdu 2084   记忆式搜索

    #include <iostream>
    #include <cstring>
    #define N 100
    using namespace std;
    int a[N][N],n,s[N][N];
    int maxsum(int i,int j)
    { if (i==n-1) return s[i][j]=a[i][j];
    else if (s[i][j]!=-1) return s[i][j];  
    else return s[i][j]=a[i][j]+max(maxsum(i+1,j),maxsum(i+1,j+1));
    }
    int main(int argc, char *argv[])
    { int i,j,c;
    cin>>c;
    while (c--)
    { cin>>n;
    memset(s,-1,sizeof(s));
    for (i=0;i<n; i++)
      for (j=0;j<=i; j++) cin>>a[i][j];
       cout<<maxsum(0,0)<<endl;
    }
    return 0;
    }
     
     
     
     
     
     
     
     
     
     
    ********************************************************************************************************************************************************************************************
     
    DP动态规划
     
     自底而上
     
     

    #include <iostream>
    #define N 100
    using namespace std;
    int a[N][N],n;
    int dp( )
    { int i,j;
    for (i=n-2;i>=0; i--)
      for (j=0; j<=i; j++)
        a[i][j]  +  =max(  a[i+1][  j ] , a[i+1][ j+1 ]  );
    }

    int main(int argc, char *argv[])
    {
      int i,j,c;
    cin>>c;
    while (c--)
    {          cin>>n;
       for (i=0;i<n; i++)
          for (j=0;j<=i; j++)       cin>>a[i][j];
            dp();
       cout<<a[0][0]<<endl;
    }
    return 0;
    }

     

  • 相关阅读:
    Eclipse 插件安装、升级和卸载的方法
    Eclipse中Spring插件的安装
    为eclipse离线安装hibernate tools插件
    Eclipse中Hibernate插件的安装
    Nginx安装配置
    app自动更新(android)
    PhoneGap应用图标icon和启动页面SplashScreen
    highcharts图表的图例legend
    安装android的sdk
    设置全屏
  • 原文地址:https://www.cnblogs.com/2014acm/p/3906603.html
Copyright © 2020-2023  润新知