信息学奥赛一本通 1296:开餐馆 | OpenJudge NOI 2.6 6045:开餐馆
【题目链接】
ybt 1296:开餐馆
OpenJudge NOI 2.6 6045:开餐馆
【题目考点】
1. 动态规划:线性动规
【解题思路】
本题与求最长上升子序列的方法类似
1. 状态定义
集合:选择地点开餐馆的方案
限制:在前几个地点中选择
属性:总利润
条件:最大
统计量:利润
(用类似求最长上升子序列中的“以第i元素为结尾的最长上升子序列“的定义方法,来构造本题的状态。)
状态定义:dp[i]
:在前i个地点中选择地点开餐馆且确定要在第i地点开餐馆,餐馆之间距离大于k,能够获得的最大利润。
2. 状态转移方程
记在第i地点开餐馆的利润为p[i]
,第i地点的位置为m[i]
。
集合:在前i个地点中选择地点开餐馆且确定要在第i位置开餐馆的方案
分隔集合:第i地点餐馆的前一个餐馆的位置
- 如果只在第i地点开餐馆,其它地方不开,那么能获得的最大利润为
dp[i] = p[i]
- 如果在第i地点餐馆的前面的位置还要开餐馆,那么前一个餐馆的位置为第j地点。由于两餐馆间距离必须大于k,所以必须满足
m[i] - m[j] > k
。
j从1开始循环到i-1,同时要满足m[i] - m[j] > k
,对于每一个可能的第i地点餐馆前一个餐馆的地点j,可以得到:前j个地点中选择地点开餐馆,且在第j地点开餐馆能获得的最大利润dp[j]
,再加上第i地点开餐馆的利润p[i]
,即为在前i个地点中选择地点开餐馆且在第i地点开餐馆能得到的最大利润。dp[i] = dp[j] + p[i]
- 以上所有情况取最大值
由于最后一个餐馆的位置可以是任意位置,最终能获得的最大利润为整个dp数组的最大值。
【题解代码】
解法1:线性动规
#include<bits/stdc++.h>
using namespace std;
#define N 105
int dp[N], m[N], p[N];//dp[i]:在前i个地点中选择地点开餐馆且确定要在第i位置开餐馆,餐馆之间距离大于k,能够获得的最大利润。
int main()
{int t, n, k, mx;cin >> t;while(t--){memset(dp, 0, sizeof(dp));//注意数据清空 mx = 0;//最大利润 cin >> n >> k;for(int i = 1; i <= n; ++i)cin >> m[i];for(int i = 1; i <= n; ++i)cin >> p[i];for(int i = 1; i <= n; ++i){dp[i] = p[i]; for(int j = 1; j < i && m[i] - m[j] > k; ++j)dp[i] = max(dp[i], dp[j] + p[i]);mx = max(mx, dp[i]);}cout << mx << endl;}return 0;
}
信息学奥赛一本通 1296:开餐馆 | OpenJudge NOI 2.6 6045:开餐馆相关推荐
- 信息学奥赛一本通 1226:装箱问题 | OpenJudge NOI 4.6 19:装箱问题
[题目链接] ybt 1226:装箱问题 OpenJudge NOI 4.6 19:装箱问题 [题目考点] 1. 贪心 [解题思路] 该题说是三维立方体,实际上无论是包裹还是产品,高度都是h,因而不用 ...
- 信息学奥赛一本通 1109:开关灯 | OpenJudge NOI 1.5 31:开关灯
[题目链接] ybt 1109:开关灯 OpenJudge NOI 1.5 31:开关灯 [题目考点] 1. 模拟 2. 循环.数组 3. 用逗号分隔输出 设标志位:isFirst,表示现在输出的是否 ...
- 信息学奥赛一本通 1190:上台阶 | OpenJudge NOI 2.3 3525:上台阶
[题目链接] ybt 1190:上台阶 OpenJudge NOI 2.3 3525:上台阶 注:ybt 1190最大数据数量为71,而OpenJudge 2.3 3525中最大数据数量为100.如果 ...
- 信息学奥赛一本通 1225:金银岛 | OpenJudge NOI 4.6 1797:金银岛
[题目链接] ybt 1225:金银岛 OpenJudge NOI 4.6 1797:金银岛 [题目考点] 1. 贪心 2. 部分背包问题 [解题思路] 该题为部分背包问题 1. 贪心选择性质的证明: ...
- 信息学奥赛一本通 1216:红与黑 / OpenJudge NOI 2.5 1818
[题目链接] ybt 1216:红与黑 OpenJudge NOI 2.5 1818:红与黑 [题目考点] 1. 连通块问题 2. 深搜/广搜 [解题思路] 1. 深搜 从第一个格子出发,遍历所有可以 ...
- 信息学奥赛一本通 1115:直方图 | OpenJudge NOI 1.9 09
[题目链接] ybt 1115:直方图 OpenJudge NOI 1.9 09:直方图 [题目考点] 1. 散列存储 也叫哈希存储.其思想为:将要存储的值通过某种算法映射到存储地址,映射算法为散列函 ...
- 信息学奥赛一本通 1114:白细胞计数 | OpenJudge NOI 1.9 08
[题目链接] ybt 1114:白细胞计数 OpenJudge NOI 1.9 08:白细胞计数 [题目考点] 1. 求数组中最大值及其下标 方法1:保存最大值和下标 设置临时最大值变量mx,mx的初 ...
- 信息学奥赛一本通 1073:救援 | OpenJudge NOI 1.5 19:救援
[题目链接] ybt 1073:救援 OpenJudge NOI 1.5 19:救援 [题目考点] 1. 直角坐标系下某点到原点的距离 点(x,y)(x,y)(x,y)到原点的距离d=x2+y2d = ...
- 信息学奥赛一本通 1070:人口增长 | OpenJudge NOI 1.5 14:人口增长问题
[题目链接] ybt 1070:人口增长 OpenJudge NOI 1.5 14:人口增长问题 [题目考点] 1. 循环求幂 设变量r初始值为1:int r = 1; 循环n次每次循环中输入变量a, ...
- 信息学奥赛一本通 1060:均值 | OpenJudge NOI 1.5 03
[题目链接] ybt 1060:均值 OpenJudge NOI 1.5 03:均值 [题目考点] 1. while循环 2. for循环 循环n次的两种写法 for(int i = 0; i < ...
最新文章
- CentOS 7 源码编译安装 Redis
- 【转】【C++】__stdcall、__cdcel和__fastcall三者的区别
- TensorFlow2-操作
- 面向对象思想设计原则
- php 封装的调试方法,关于php面向的特性之封装
- 深入浅出SharePoint2010——请假系统无代码篇之表单设计
- myeclipse中JSP页面不能更新时候的做法
- linux qt遍历设备,Qt获取设备环境变量
- Excel如何将数据填充完下方的空白单元格
- 互联网产品经理的工作职责
- 数字签名与数字加密的区别
- Java2实用教程(第五版)/第五章例题
- CC1310空中升级笔记02 CC26xx_CC13xx_BLE_OAD_例程梳理
- ORACLE导出表数据-dmp文件
- Your build settings specify a provisioning profile with the UUID, no provisioni(没多大用)
- web端腾讯PAG初体验
- 灵机一动-趣味问题种种
- internal/modules/cjs/loader.js:584 issue
- js实现鼠标悬浮元素出现/隐藏效果
- 新人百度百科怎么做_如何做新人百科技巧分享
热门文章
- 中国Linux界的一些牛人(部分)
- 分享写SQL的21个好习惯!
- java爬取国家应急平台漏洞公告数据
- c/c++ 二维数组指针参数传递 矩阵计算实例
- android 壁纸存储位置,手机图片去了哪?教你理清照片存放路径(全文)
- Excel VBA为表格设置“打开文件密码”
- 免费把自己写的网页上传到网上(腾讯云)
- 计算机存储程序的理论由谁提出,存储程序的概念是由谁提出来的
- 2429: [HAOI2006]聪明的猴子
- Android高级-笔记