zoukankan      html  css  js  c++  java
  • 动规作业-求数组不相邻元素之和的最大值

    描述
    给定一个长度为n的数组,从其中任意选择不相邻的m个元素形成子数组,求这个子数组所有元素之和的最大值。
    
    
    关于输入
    输入包括两行。
    第一行为一个正整数n(0<=n<=10000)。
    第二行为n个正整数,表示整个数组。
    
    
    关于输出
    输出一个数字,代表数组所有不相邻元素之和的最大值。
    
    
    例子输入
    5
    
    1 2 3 4 5
    例子输出
    9

    代码:

     1 //求数组不相邻元素之和的最大值 
     2 //2019-11-26 
     3 #include<iostream>
     4 using namespace std;
     5 int a[10010];
     6 int d[10010]; //d[i]表示从前i个数中取不相邻元素之和的最大值 
     7 int main(){
     8     int n;
     9     cin>>n;
    10     int i,j;
    11     for(i = 1; i <= n; i++)
    12         cin>>a[i]; 
    13     d[1] = a[1];
    14     d[2] = max(a[1],a[2]);
    15     for(i = 3; i <= n; i++)
    16         d[i] = max(d[i-1],d[i-2]+a[i]);
    17     cout<<d[n]; 
    18     return 0;
    19 }

    备注:

    这道题感觉有点像是一维的背包问题类似?都是考虑从前i个数里取。首先要注意初始化前两个数,因为要用到i-2。还有不同的是,因为不相邻的限制,考虑第i时,如果取第i个数,那么就应该是d[i-2]+a[i],如果不取,就延续d[i-1]

  • 相关阅读:
    面对复杂业务,if-else coder 如何升级?
    为什么StringBuilder是线程不安全的?
    Hashmap中文解释
    mysql 5.6 5.7 8.0新特性
    数据增强,扩充数据集
    神经网络参数优化器
    缓解过拟合
    损失函数
    神经网络的复杂度&指数衰减学习率&激活函数
    GRU&实例股价预测
  • 原文地址:https://www.cnblogs.com/fangziyuan/p/11936888.html
Copyright © 2011-2022 走看看