zoukankan      html  css  js  c++  java
  • Codevs 数字三角形 问题合集

    1220 数字三角形

    时间限制: 1 s    空间限制: 128000 KB    题目等级 : 黄金 Gold

    题目描述 Description

    如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层,要求找出一条路径,使路径上的值最大。

    输入描述 Input Description

    第一行是数塔层数N(1<=N<=100)。

    第二行起,按数塔图形,有一个或多个的整数,表示该层节点的值,共有N行。

    输出描述 Output Description

    输出最大值。

    样例输入 Sample Input

    5

    13

    11 8

    12 7 26

    6 14 15 8

    12 7 13 24 11

    样例输出 Sample Output

    86

    数据范围及提示 Data Size & Hint
    数字三角形
     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 int w[157][157],n; 
     6 int main()
     7 {
     8     scanf("%d",&n);
     9     for(int i=1;i<=n;i++)
    10       for(int j=1;j<=i;j++)
    11         scanf("%d",&w[i][j]);
    12     for(int i=n-1;i>=1;i--)
    13       for(int j=1;j<=i;j++)
    14         w[i][j]+=max(w[i+1][j],w[i+1][j+1]);
    15     printf("%d",w[1][1]);
    16     return 0;
    17 }

    2189 数字三角形W

    时间限制: 1 s    空间限制: 32000 KB    题目等级 : 黄金 Gold

    题目描述 Description

    数字三角形
    要求走到最后mod 100最大

    输入描述 Input Description

    第1行n,表示n行
    第2到n+1行为每个的权值

    输出描述 Output Description

    mod 100最大值

    样例输入 Sample Input

    2
    1
    99 98

    样例输出 Sample Output

    99

    数据范围及提示 Data Size & Hint

    n<=25

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 const int p=100;
     6 int w[35][35],n,f[35][35][105]; 
     7 int main()
     8 {
     9     scanf("%d",&n);
    10     for(int i=1;i<=n;i++)
    11       for(int j=1;j<=i;j++)
    12         scanf("%d",&w[i][j]);
    13     f[1][1][ ((w[1][1]%p) + p)%p ]=1;
    14     
    15     for(int i=2;i<=n;i++)
    16       for(int j=1;j<=i;j++)
    17        for(int k=0;k<=99;k++)
    18          f[i][j][k]=f[i-1][j][( ( k-w[i][j]) %p+p ) %p ]||
    19            f[i-1][j-1][( ( k-w[i][j]) %p+p ) %p ];
    20     int maxx=0;
    21     for(int i=1;i<=n;i++)
    22       for(int j=99;j>=0;j--)
    23         if(f[n][i][j]) maxx=max(maxx,j);
    24     printf("%d",maxx);
    25     return 0;
    26 }

    说实话这道题我不知道是不是动态规划,这DP也不是我写的(可能是数据太水把我放过去了),我觉得这不满足动态规划无后效性的原则,望大神路过留言。。。

    2193 数字三角形WW

    时间限制: 1 s    空间限制: 32000 KB    题目等级 : 钻石 Diamond

    题目描述 Description

    数字三角形必须经过某一个点,使之走的路程和最大

    输入描述 Input Description

    第1行n,表示n行
    第2到n+1行为每个的权值
    程序必须经过n div 2,n div 2这个点

    输出描述 Output Description

    最大值

    样例输入 Sample Input

    2
    1
    1 1

    样例输出 Sample Output

    2

    数据范围及提示 Data Size & Hint

    n <=25

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int n,x,y,w[35][35],ko;
    long long f[35][35];
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
          for(int j=1;j<=i;j++)
            scanf("%d",&w[i][j]);
        f[1][1]=w[1][1];
        w[n/2][n/2]+=99999999;
        for(int i=2;i<=n;i++)
          for(int j=1;j<=i;j++)
            f[i][j]=w[i][j]+max(f[i-1][j],f[i-1][j-1]);
        long long ans=0;
        for(int i=1;i<=n;i++)
          ans=max(ans,f[n][i]);
        printf("%lld",ans-99999999);
        return 0;
    }

    这次是正推。。

    2198 数字三角形WWW

    时间限制: 1 s    空间限制: 32000 KB    题目等级 : 钻石 Diamond

    题目描述 Description

    数字三角形必须经过某一个点,使之走的路程和最大

    输入描述 Input Description

    第1行n,表示n行 
    第2到n+1行为每个的权值
    第n+2行为两个数x,y表示必须经过的点

    输出描述 Output Description

    最大值

    样例输入 Sample Input

    2
    1
    1 1
    1 1

    样例输出 Sample Output

    2

    数据范围及提示 Data Size & Hint

    n<=25

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int n,x,y,w[35][35],ko;
    long long f[35][35];
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
          for(int j=1;j<=i;j++)
            scanf("%d",&w[i][j]);
        scanf("%d%d",&x,&y);
        w[x][y]+=99999999;
        f[1][1]=w[1][1];
        for(int i=2;i<=n;i++)
          for(int j=1;j<=i;j++)
            f[i][j]=w[i][j]+max(f[i-1][j],f[i-1][j-1]);
        long long ans=0;
        for(int i=1;i<=n;i++)
          ans=max(ans,f[n][i]);
        printf("%lld",ans-99999999);
        return 0;
    }
  • 相关阅读:
    第一次离职了
    华为手机 关于Android真机调试的时候logcat中无法输出调试信息的解决办法
    ListView的简单实用
    博客生涯开始
    hdu1151:Air Raid(最小路径覆盖)
    hdu1151:Air Raid(最小路径覆盖)
    hdu1162:Eddy's picture(最小生成树)
    hdu1162:Eddy's picture(最小生成树)
    hdu1301:Jungle Roads(最小生成树)
    hdu1301:Jungle Roads(最小生成树)
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6362014.html
Copyright © 2011-2022 走看看