zoukankan      html  css  js  c++  java
  • POJ

    input:

    5
    1
    3
    1
    5
    2
    

      

    output:

    43
    

      

    题目大意:

    有一个数串,每次只能拿头和尾中的一个,现在有一个算法,拿取的数*第几个拿走,然这一串数串最后的和最
    大。
    

      

    分析:

    区间dp。dp[i][j]=[i,j]区间最大和。转移方程:dp[i][j]=max(dp[i+1][j]+a[i]*k,dp[i][j-1]+a[j]*k)。详
    细看代码
    

      

    code:

    #define frp
    
    //#include<bits/stdc++.h>
    #include<cmath>
    #include<algorithm>
    #include<iostream>
    
    using namespace std;
    typedef long long ll;
    const ll INF = 0x3f3f3f3f;
    const ll inf = 0x7fffff;
    const int maxn = 1000;
    const int MAXN = 20050;
    
    int dp[2010][2010];
    int a[2010];
    
    void solve() {
        int n;
        cin >> n;
        for (int i = 0; i < n; i++) {
            cin >> a[i + 1];
        }
        for (int i = 0; i < n; i++) {
            for (int j = 1; j + i <= n; j++) {
                dp[j][i + j] = max(dp[j + 1][i + j] + (n - i) * a[j], dp[j][i + j - 1] + (n - i) * a[i + j]);
            }
        }
        cout << dp[1][n] << endl;
    }
    
    int main() {
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
    #ifdef frp
        freopen("D:\coding\c_coding\in.txt", "r", stdin);
    //    freopen("D:\coding\c_coding\out.txt", "w", stdout);
    #endif
        solve();
        return 0;
    }
    

      

  • 相关阅读:
    react学习笔记4
    php学习笔记
    react学习笔记2
    react学习笔记
    获取一个数组中的随机值
    添加数据库补丁
    $.post $.getScript
    SQLServer2008将表数据导出的方法
    DataTable筛选符合条件的DataRow
    c# 下拉多选的实现
  • 原文地址:https://www.cnblogs.com/visualVK/p/9721333.html
Copyright © 2011-2022 走看看