zoukankan      html  css  js  c++  java
  • Super Jumping! Jumping! Jumping! HDU 1087

    http://acm.hdu.edu.cn/showproblem.php?pid=1087

     

    解题思路:

    既然我们要找跳跃能得到的最大值,那么我们可以建立一个数组opt[n],来记录到达第a[i]项的最优解。

    因为设置i总比j大,所以这里maxl是取不到opt[0]的,因此我们将maxl的值初始化为a[0]。

    于是对于遍历的每一项a[i],我们考虑怎样跳跃在i前小于a[i]的格子来让到达a[i]时能够有最大值。当遍历到一个a[j]<a[i]时,我们比较opt[j]+a[i]与opt[i]的值,将最大的那个放入opt[i],那么我们通过从0~i-1一定能够得到从0到a[i]跳跃能够得到的最大价值。而当i前并没有大于a[i]的值时,opt[i]=a[i]。所以就在读取数组元素时直接初始化opt数组。

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 #include <algorithm>
     5 
     6 #define N 100010
     7 
     8 using namespace std;
     9 
    10 typedef long long int ll;
    11 
    12 int main()
    13 {
    14     int n;
    15     int a[1010], opt[1010];
    16     while(scanf("%d", &n), n){
    17         int i, j, maxl;
    18         for(i=0; i<n; i++){
    19             scanf("%d", &a[i]);
    20             opt[i]=a[i];
    21         }
    22         maxl=opt[0];
    23         for(i=0; i<n; i++){
    24             for(j=0; j<i; j++){
    25                 if(a[j]<a[i]){
    26                     opt[i]=max(opt[j]+a[i], opt[i]);
    27                     maxl=max(maxl, opt[i]);
    28                 }
    29             }
    30         }
    31         printf("%d\n", maxl);
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    通过注册表获取计算机相关信息
    GetTickCount()函数
    SystemInfo获取计算机相关信息
    CriticalSection 临界区
    mysql慢查询问题
    mysql show processlist详解
    nginx及php版本号隐藏
    安装psutil模块报错&安装python-devel
    ubuntu ssh重启
    php-fpm配置优化
  • 原文地址:https://www.cnblogs.com/Arrokoth/p/12013726.html
Copyright © 2011-2022 走看看