zoukankan      html  css  js  c++  java
  • 区间DP 洛谷P2858牛奶零食

    题目链接

    题意:你有n个货物从1-n依次排列,每天可以从两侧选一个出来卖,卖的价格是当天的天数乘该货物的初始价格,问这批货物卖完的最大价格

    输入:第一行n,之后是n个货物的初始价值

    这道题不能用贪心做,因为可能存在右端点非常大,但其左边的数非常小, 但因为右端点太大而没被及时卖出

    如:9 9 9 1 1 10

    贪心:sum=9*1+9*2+9*3+1*4+1*5+10*6=123

    而正解为150,也就是说这个题当前的决策会影响到后面的一些决策,不能贪心

    dp[i][j]是区间i到j的货物卖完的最大价格

    DP的话第一层循环长度,第二层循环左端点

    #include <bits/stdc++.h>
    using namespace std;
    const double pi=acos(-1);
    const int mod=1e9+7;
    const int maxn=2010;
    const int inf=1<<30;
    typedef long long ll;
    int v[maxn];
    int dp[maxn][maxn];
    int main(){
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&v[i]);
        for(int i=1;i<=n;i++)dp[i][i]=v[i]*n;
        for(int i=2;i<=n;i++){
            for(int l=1;(l+i-1)<=n;l++){
                int r=l+i-1;
                dp[l][r]=max(dp[l+1][r]+(n-i+1)*v[l],dp[l][r-1]+(n-i+1)*v[r]);
            }
        }
        cout<<dp[1][n]<<endl;
        return 0;
    }
  • 相关阅读:
    HTML、CSS、JS 复习——序
    HTML + CSS短标题(二,三,四文字长度)两端对齐的方式
    Supper关键字
    java的重写
    java重载
    Java继承
    JAVA访问权限控制
    (转)java类初始化顺序
    Java 数组和集合
    Java 方法签名
  • 原文地址:https://www.cnblogs.com/qingjiuling/p/10610593.html
Copyright © 2011-2022 走看看