当前位置: 首页 > news >正文

从零精通网站建设国际新闻热点事件

从零精通网站建设,国际新闻热点事件,苏州新区城乡建设网站,三合一企业网站模板题目描述 暑假共有 n 天,第 i 天的精力指数为 a[i],你想要利用假期依次(按 1,2,...,m 顺序)复习 m 门功课,第 i 门功课的重要程度为 b[i],且每门的复习时段必须连 续,并且不能有某天不干事。 …

题目描述

暑假共有 n 天,第 i 天的精力指数为 a[i],你想要利用假期依次(按 1,2,...,m 顺序)复习 m 门功课,第 i 门功课的重要程度为 b[i],且每门的复习时段必须连
续,并且不能有某天不干事。

假设第 i 门功课的复习时段为第 l∼r 天,那么第 i 门功课的收益为 b[i]×(a[l]+a[l+1]+...+a[r]),你的总收益为 m 门功课收益的总和。

请你制订一个复习计划,使得总收益最大。

形式化地,给定序列 a[1∼n],b[1∼m],你需要把 1,2,...,n 这个序列分成首尾相
连且非空的 m 段,假设每段的 a 之和为 s[1∼m],最大化 ∑i+1m​b[i]×s[i] 的值。

例如 a=[−3,6,−1,−8,7,−6],b=[−3,2],最优策略是第 1∼4 天复习第 1 门功课,收益为 −3×(−3+6−1−8)=18;第 5∼6 天复习第 2 门功课,收益为 2×(7−6)=2;总收益为 18+2=20。

例如 a=[6,3,5,10,5],b=[−8,−5,−5],最优策略是分成 [1],[2,3,4],[5] 三段,总收益为 −8×6−5×(3+5+10)−5×5=−163。

输入格式

第一行为 1 个整数 T,代表有 T 组数据。

每组数据第一行 2 个整数 n,m,第二行 n 个整数 a[1∼n],第三行 m 个整数 b[1∼m]。

输出格式

输出 T 行,每行 1 个整数代表答案。

样例 #1

样例输入 #1

5
6 2
-3 6 -1 -8 7 -6
-3 2
5 4
-9 -6 -6 -7 -8
-5 7 -9 -3
7 7
7 2 3 0 -2 4 2
-9 -2 -5 0 -7 9 -1
5 3
10 4 6 7 4
-1 -9 2
5 3
6 3 5 10 5
-8 -5 -5

样例输出 #1

20
144
-34
-12
-163

提示

对于所有数据,满足 1≤T≤20,1≤m≤n≤2000,−10^3≤a[i],b[i]≤10^3 。

对于测试点 1∼7:n≤10

对于测试点 8∼12:n≤500

对于测试点 13∼16:所有 a[i],b[i] 均为正整数

对于测试点 17∼20:n≤2000

#include <bits/stdc++.h>
using namespace std;int a[2010],b[2010];//-1e3~1e3 -1e3~1e3
int dp[2010];//-2e9~2e9
int main()
{int t;//1~2e1cin>>t;while(t--){memset(dp,0x80,sizeof(dp));int n,m;//1~2e3cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=m;i++)cin>>b[i];dp[1]=a[1]*b[1];for(int i=2;i<=n;i++)for(int j=m;j>=1;j--)dp[j]=a[i]*b[j]+max(dp[j-1],dp[j]);cout<<dp[m]<<endl;}return 0;
}

背景

        这道题是我考BCSP-X的T3,当时直接爆零……

主题思路

        首先,最重要的一点——你得意识到这是个DP。在这之后,要思考几件事。

                1.不出意外的话,这是个二维dp,毕竟是T3。

                2.直觉告诉我们,dp[i][j]里存的是到i为止的最大收益。那第一、二维代表什么?可以找题目中的时间,状态,以及其他变量。有时间(天),那第一维就是天。很显然,第二维最合适的的是科目,因为它与时间没有什么关联,而且是决定答案的关键因素之一。

                3.dp[i][j]是由什么推导而来的?即第1~i天如果选择第j门功课,最大收益与什么有关联?走到这一步时,首先要加上今天本身的收益——a[i]*b[j],紧接着要加第1~i-1天的最大收益,这时你有两个选择(要选最大值)。如果你仍延续了昨天的选择,如继续学习语文,那么要加上dp[i-1][j],时间变为昨天,科目不变;如果你换了一科,如改为学习数学,那么要加上dp[i-1][j-1],时间变为昨天,科目变为上一个科目。注意,题目中说“你想要利用假期依次(按 1,2,...,m 顺序)复习 m 门功课”,那么你就只能是紧挨着你的上一个功课变来的。

         接下来就没什么了,由3.我们可以得到最最最重要的状态转移方程式:dp[i][j]=a[i]*b[j]+max(dp[i-1][j-1],dp[i-1][j]);,就……做完了。

细节重点

        1.由于是多组数据,肯定少不了memset。a、b数组会覆盖不用管,但是dp要给赋值成极小值。这是因为在max(dp[j-1],dp[j])处可能会取到尚未赋值的dp区域,如果赋值的部分是负数,理论上应取这个负数,但如果置成0就会取0,所以最开始要赋值为极小值(0x80808080),让他“被迫”选这个复数。

        2.写完之后,你会发现这道题像极了01背包,相应的,你也可以做同样的空间压缩。由于每次只与上一行有推导关系,可以将第一维删去。需要注意的是,如果你想访问上一轮的数据,在递推的第二层循环处你需要改成逆序。

http://www.dt0577.cn/news/48277.html

相关文章:

  • 南昌有做网站的吗濮阳网站推广
  • 东莞网站优化域名注册查询软件
  • 网站优化怎么样东莞网站制作
  • 北京专业的网站ui设计公司百度推广后台登陆
  • 网站建设制度搜索引擎技术
  • 用html5做的静态网站sem是什么仪器
  • 购物02网站竞价推广托管公司介绍
  • 企业网站建立会计培训班一般多少钱
  • 如何把自己的网站推广抖音热门搜索关键词
  • 网站留言板怎么做长沙靠谱seo优化
  • 烟台网站设计公司网络营销推广的要点
  • ps的logo设计制作成都百度提升优化
  • 电影怎么做bt种子下载网站百度seo竞价推广是什么
  • 什么叫高端网站定制seo建站公司
  • 做网站项目前怎么收集需求网站ip查询
  • 海口做网站公司收费球队排名世界
  • 淘宝客单页网站程序找推网
  • 杭州营销网站建设新河seo怎么做整站排名
  • 陕西省和城乡建设厅网站长沙网站推广seo
  • 珠海市网站建设公司百度客服24小时人工服务在线咨询
  • 赣州有店科技有限公司东莞seo顾问
  • 导航网站怎么做网络推广网站推广方法
  • 怎么利用源码做网站百度关键词如何优化
  • 外包公司拖欠工资找谁讨要网站自然排名优化
  • 腾讯网站建设专家百度权重优化软件
  • 一个公司网站备案站长工具app下载
  • opencart做的网站广东seo推广公司
  • 做网站怎么还用身份证百度帐号登录
  • 汕头企业网站推广方法数据网站
  • 怎么用pf做网站提高工作效率