小烈送菜

题目描述

小烈一下碰碰车就被乐满地的工作人员抓住了。作为扰乱秩序的惩罚,小烈必须去乐满地里的“漓江村”饭店端盘子。

服务员的工作很繁忙。他们要上菜,同时要使顾客们尽量高兴。一位服务生为 \(n\) 个顾客上菜。这 \(n\) 个顾客坐成一排,小烈从一端的厨房中端出\(n\)盘菜(不要问我为什么小烈能一下子端住 \(2500\) 盘菜,他就是能)为 \(n\) 个顾客各上一道相同的菜。

显然,小烈需要走一个来回,如图:

本来,小烈可以按 \(1,2,3...n\) 的顺序一次给每个顾客上菜,但是,聪明的小烈通过观察发现,每个顾客都有一个开心值 \(H_1\)、\(H_2\)、\(H_3\)...\(H_n\) ,离厨房最近的为 \(H_1\) ,然后依次为 \(H_2\)、\(H_3\)...\(H_n\) 。若小烈给第 \(j\) 位顾客上菜前刚刚为第 \(i\) 位顾客上菜,则第 \(j\) 位就会高兴,产生高兴指数 \(W_j=H_i\times H_j\) 。这样,如果小烈按一定的方式调整上菜顺序,可以得到更高的高兴指数。现在小烈想知道用某一方法可达到的 \(n\) 位顾客高兴指数之和的最大值 \(S\) 。因为顾客越高兴,给小烈的小费越多。第一位上菜的顾客不产生高兴值。

输入格式

第一行一个整数 \(n\) ,顾客的数目。

第二行 \(n\) 个数,第 \(i\) 个数表示第 \(i\) 位顾客的开心值。各个数字用空格隔开。

输出格式

一个数 \(s\) ,为高兴指数的最大值。

样例

样例输入

3
7 1 9

样例输出

72

数据范围与提示

样例解释:从左往右上 \(1\) 的菜,再上 \(9\) 的菜,高兴值是 \(0\times 1+1\times 9\) ,从右往左走回来的时候上 \(7\) 的菜,高兴值是 \(7\times 9\) ,总的高兴值就是 \(72\) 。

对于 \(30\%\) 的数据\(n\leq9,n\in N^+\);

对于 \(70\%\) 的数据\(n\leq1500,n\in N^+\);

对于 \(100\%\) 的数据\(n\leq2500,n\in N^+\);

所有数字小于(含结果) \(2147483648\) ;

思路

题意中的来回两次直接 \(dp\) 的话,还需要记录第一次走的路径,很麻烦。

根据之前的方格取数,我们也可以把这个题转换成两个小烈送菜。

定义 \(dp[i][j]\) 为有两个小烈同时从厨房开始送菜,第一个小烈到达 \(i\) 的位置,第二个小烈到达 \(j\) 的位置,所能取到的最大值。

有一个很重要的性质:\(dp[i][j]=dp[j][i]\)。

第一个小烈送到 \(i\) 的位置,第二个小烈送到 \(j\) 的位置与第一个小烈送到 \(j\) 的位置,第二个小烈送到 \(i\) 的位置所得的结果是相同的。

动态转移方程:

第一个小烈由 \(i\) 送到 \(i+1\) 的位置。

\(dp[i+1][j]=max(dp[i+1][j],dp[i][j]+a[i]*a[i+1])\)

或者第二个小烈由 \(j\) 送到 \(i+1\) 的位置。

\(dp[i][i+1]=max(dp[i][i+1],dp[i][j]+a[j]*a[i+1])\)

根据之前的性质,可以把转移方程转化为:

\(dp[i+1][i]=max(dp[i+1][i],dp[i][j]+a[j]*a[i+1])\)

这样保证了 \(dp[i][j]\) 中的 \(i\) 一定会大于 \(j\),便于处理。

最后在寻找一遍最大值即可。

代码

#include <bits/stdc++.h>
using namespace std; const int maxn=2500+50;
int n,ans;
int a[maxn];
int dp[maxn][maxn]; int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++){
for(int j=0;j<i;j++){
dp[i+1][j]=max(dp[i+1][j],dp[i][j]+a[i]*a[i+1]);//前面那个处于i位置的小烈送i+1的菜
dp[i+1][i]=max(dp[i+1][i],dp[i][j]+a[j]*a[i+1]);//后面那个处于j位置的小烈送i+1的菜,并根据性质翻转
}
}
for(int i=0;i<n;i++){
ans=max(ans,dp[n][i]+a[n]*a[i]);//前面那个小烈送到n的位置,但是不确定后面那个小烈在哪里,所以以此枚举
}
cout<<ans<<endl;
return 0;
}

小烈送菜——奇怪的dp的更多相关文章

  1. 方格取数(简单版)+小烈送菜(不知道哪来的题)-----------奇怪的dp增加了!

    一.方格取数: 设有N*N的方格图(N<=20),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0. 某人从图的左上角的A(1,1) 点出发,可以向下行走,也可以向右走,直到到达右下 ...

  2. 线性DP之小烈送菜

    小烈送菜 小烈一下碰碰车就被乐满地的工作人员抓住了.作为扰乱秩序的惩罚,小烈必须去乐满地里的"漓江村"饭店端盘子. 服务员的工作很繁忙.他们要上菜,同时要使顾客们尽量高兴.一位服务 ...

  3. [HNOI2009]双递增序列(洛谷P4728)+小烈送菜(内部训练题)——奇妙的dp

    博主学习本题的经过嘤嘤嘤: 7.22 : 听学长讲(一知半解)--自己推(推不出来)--网上看题解--以为自己会了(网上题解是错的)--发现错误以后又自己推(没推出来)--给学长发邮件--得到正确解法 ...

  4. 青年菜君与小农女送菜商业模式PK

    青年菜君与小农女送菜商业模式PK   对比项 青年菜君 小农女送菜 优势 劣势 开业 2014年3月3日 2013年9月 渠道 地铁捕获用户 写字楼配送 送货 来店面自取 送货到写字楼 菜君 1.减少 ...

  5. BZOJ 4316: 小C的独立集 仙人掌 + 树形DP

    4316: 小C的独立集 Time Limit: 10 Sec  Memory Limit: 128 MB Description 图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨. ...

  6. [CSP-S模拟测试]:小奇的矩阵(matrix)(DP+数学)

    题目背景 小奇总是在数学课上思考奇怪的问题. 题目描述 给定一个$n\times m$的矩阵,矩阵中的每个元素$a_{i,j}$为正整数.接下来规定:    $1.$合法的路径初始从矩阵左上角出发,每 ...

  7. BZOJ 3437: 小P的牧场 斜率优化DP

    3437: 小P的牧场 Description 背景 小P是个特么喜欢玩MC的孩纸... 描述 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场 ...

  8. bzoj3427小P的牧场(斜率优化dp)

    小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制站控制的牧场是它所在的牧 ...

  9. uoj132/BZOJ4200/洛谷P2304 [Noi2015]小园丁与老司机 【dp + 带上下界网络流】

    题目链接 uoj132 题解 真是一道大码题,,,肝了一个上午 老司机的部分是一个\(dp\),观察点是按\(y\)分层的,而且按每层点的上限来看可以使用\(O(nd)\)的\(dp\),其中\(d\ ...

随机推荐

  1. 一篇文章教会你用Python抓取抖音app热点数据

    今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...

  2. Spyder汉化教程

    汉化包下载地址:https://www.lizenghai.com/archives/523.html 1.解压汉化包 2. 3.1.运行汉化补丁PS C:\WINDOWS\system32> ...

  3. 关于Attach *.mdf数据库联想到的备份

    要求: 将SQL2008R2的*.mdf ( 当时内部版本不详,此时无挂接在MSSQL服务器上的数据库,只有*.mdf文件 ) --->>> SQL2008R2中,附加到现有SQL2 ...

  4. Mybatis源码手记-从缓存体系看责任链派发模式与循环依赖企业级实践

    一.缓存总览 Mybatis在设计上处处都有用到的缓存,而且Mybatis的缓存体系设计上遵循单一职责.开闭原则.高度解耦.及其精巧,充分的将缓存分层,其独到之处可以套用到很多类似的业务上.这里将主要 ...

  5. JSONobject按照put顺序存储和读取

    new的时候加true即可: JSONObject jsonObject = new JSONObject(true);

  6. Linux服务器安装python3.6

    CentOS 7上默认安装的python版本是2.7.5,系统自带的旧版本python被系统很多其他软件环境依赖,因此不能卸载原Python,直接选择Python3.6.5进行全新安装. 1 安装Py ...

  7. 简易的phpexcel导出柱状图

      首先得把phpexcel扩展的源码拷贝到项目文件下 下面是代码   /** 引入最重要的PHPExcel类库的入口文件 */ require(STK_PATH.'/class/stk/PHPExc ...

  8. 西门子S7-300 PLC视频教程(百度网盘)收集于网络-供参考学习

    百度网盘地址: 西门子300 PLC视频教程 群文件里面可以找到. 下载: https://blog.csdn.net/txwtech/article/details/93016190

  9. Redis的常用配置

    1. 配置守护线程方式运行,修改damonize,使用yes启用守护线程,这样就可以后台运行了 damonize no 修改为 damonize yes 2. 手动指定redis的pid,可以通过pi ...

  10. xenomai内核解析之双核系统调用(一)

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 xenomai 内核系统调用 一.32位Lin ...