zoukankan      html  css  js  c++  java
  • hdu 2391 Filthy Rich

    题目大意:在一个r*c的方格中行走,只能向下和向右走,每个格子内有一定的黄金,问能得到的最大黄金数。

    AC代码:

    View Code
     1 #include<stdio.h>
     2 #include<string.h>
     3 int dp[1002][1002];
     4 int max(int a,int b)
     5 {
     6     if(a>b)return a;
     7     else return b;
     8 }
     9 int main()
    10 {
    11    int t;
    12    scanf("%d",&t);
    13    int w=1;
    14    while(t--)
    15    {
    16        memset(dp,0,sizeof(dp));
    17        int i,j,r,c,a;
    18        scanf("%d%d",&r,&c);
    19        for(i=1;i<=r;i++)
    20        {
    21            for(j=1;j<=c;j++)
    22            {
    23                scanf("%d",&a);
    24                dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a;
    25            }
    26        }
    27        printf("Scenario #%d:\n",w++);
    28        printf("%d\n\n",dp[r][c]);
    29    }
    30    return 0;
    31 }

    ps:虽然过了但是时间有点长。

    网上的一个最快的代码:

    View Code
     1 #include<iostream>
     2 using namespace std;
     3 int dp[1001][1001];
     4 inline int readdata()
     5 {
     6     int ret(0);
     7     char c;
     8     while((c=getchar())<'0'||c>'9');
     9     ret=c-'0';
    10     while((c=getchar())>='0'&&c<='9')ret=ret*10+(c-'0');
    11     return ret;
    12 }
    13 inline void pridata(int x)
    14 {
    15     char top[12];
    16     int i(0);
    17     if(x==0){putchar('0');return;}
    18     while(x)
    19     {
    20         top[i++]=(x%10)+'0';
    21         x/=10;
    22     }
    23     while(i--)putchar(top[i]);
    24 }
    25 int main()
    26 {
    27     int idx=0;
    28     short i,j;
    29     short n,m;
    30     int tmp;
    31     short t;
    32     t=readdata();
    33     while(t--)
    34     {
    35         n=readdata();
    36         m=readdata();
    37         for(i=0;i<n;++i)
    38             for(j=0;j<m;++j)
    39                 dp[i][j]=readdata();
    40         for(i=n-1;i>=0;--i)
    41             for(j=m-1;j>=0;--j)
    42             {
    43                 tmp=0;
    44                 if(j+1<m)tmp=max(tmp,dp[i][j+1]);
    45                 if(i+1<n)tmp=max(tmp,dp[i+1][j]);
    46                 if(i+1<n&&j+1<m)tmp=max(tmp,dp[i+1][j+1]);
    47                 dp[i][j]+=tmp;
    48             }
    49         printf("Scenario #");
    50         pridata(++idx);
    51         putchar(':');
    52         putchar('\n');
    53         pridata(dp[0][0]);
    54         putchar('\n');
    55         putchar('\n');
    56     }
    57     return 0;
    58 }

    ps:没看懂!!!!!

  • 相关阅读:
    64位整数乘法
    HTML中常见问题汇总贴
    题解 牛客【「水」悠悠碧波】
    题解 CF1391B 【Fix You】
    四级-句子
    快速幂||取余运算
    最大子列和
    JvavScript中的函数与对象
    JavaScript中的流程控制语句
    冒泡排序,选择排序,插入排序,归并排序
  • 原文地址:https://www.cnblogs.com/ACshasow/p/2739145.html
Copyright © 2011-2022 走看看