【题目链接】

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:开餐馆相关推荐

  1. 信息学奥赛一本通 1226:装箱问题 | OpenJudge NOI 4.6 19:装箱问题

    [题目链接] ybt 1226:装箱问题 OpenJudge NOI 4.6 19:装箱问题 [题目考点] 1. 贪心 [解题思路] 该题说是三维立方体,实际上无论是包裹还是产品,高度都是h,因而不用 ...

  2. 信息学奥赛一本通 1109:开关灯 | OpenJudge NOI 1.5 31:开关灯

    [题目链接] ybt 1109:开关灯 OpenJudge NOI 1.5 31:开关灯 [题目考点] 1. 模拟 2. 循环.数组 3. 用逗号分隔输出 设标志位:isFirst,表示现在输出的是否 ...

  3. 信息学奥赛一本通 1190:上台阶 | OpenJudge NOI 2.3 3525:上台阶

    [题目链接] ybt 1190:上台阶 OpenJudge NOI 2.3 3525:上台阶 注:ybt 1190最大数据数量为71,而OpenJudge 2.3 3525中最大数据数量为100.如果 ...

  4. 信息学奥赛一本通 1225:金银岛 | OpenJudge NOI 4.6 1797:金银岛

    [题目链接] ybt 1225:金银岛 OpenJudge NOI 4.6 1797:金银岛 [题目考点] 1. 贪心 2. 部分背包问题 [解题思路] 该题为部分背包问题 1. 贪心选择性质的证明: ...

  5. 信息学奥赛一本通 1216:红与黑 / OpenJudge NOI 2.5 1818

    [题目链接] ybt 1216:红与黑 OpenJudge NOI 2.5 1818:红与黑 [题目考点] 1. 连通块问题 2. 深搜/广搜 [解题思路] 1. 深搜 从第一个格子出发,遍历所有可以 ...

  6. 信息学奥赛一本通 1115:直方图 | OpenJudge NOI 1.9 09

    [题目链接] ybt 1115:直方图 OpenJudge NOI 1.9 09:直方图 [题目考点] 1. 散列存储 也叫哈希存储.其思想为:将要存储的值通过某种算法映射到存储地址,映射算法为散列函 ...

  7. 信息学奥赛一本通 1114:白细胞计数 | OpenJudge NOI 1.9 08

    [题目链接] ybt 1114:白细胞计数 OpenJudge NOI 1.9 08:白细胞计数 [题目考点] 1. 求数组中最大值及其下标 方法1:保存最大值和下标 设置临时最大值变量mx,mx的初 ...

  8. 信息学奥赛一本通 1073:救援 | OpenJudge NOI 1.5 19:救援

    [题目链接] ybt 1073:救援 OpenJudge NOI 1.5 19:救援 [题目考点] 1. 直角坐标系下某点到原点的距离 点(x,y)(x,y)(x,y)到原点的距离d=x2+y2d = ...

  9. 信息学奥赛一本通 1070:人口增长 | OpenJudge NOI 1.5 14:人口增长问题

    [题目链接] ybt 1070:人口增长 OpenJudge NOI 1.5 14:人口增长问题 [题目考点] 1. 循环求幂 设变量r初始值为1:int r = 1; 循环n次每次循环中输入变量a, ...

  10. 信息学奥赛一本通 1060:均值 | OpenJudge NOI 1.5 03

    [题目链接] ybt 1060:均值 OpenJudge NOI 1.5 03:均值 [题目考点] 1. while循环 2. for循环 循环n次的两种写法 for(int i = 0; i < ...

最新文章

  1. CentOS 7 源码编译安装 Redis
  2. 【转】【C++】__stdcall、__cdcel和__fastcall三者的区别
  3. TensorFlow2-操作
  4. 面向对象思想设计原则
  5. php 封装的调试方法,关于php面向的特性之封装
  6. 深入浅出SharePoint2010——请假系统无代码篇之表单设计
  7. myeclipse中JSP页面不能更新时候的做法
  8. linux qt遍历设备,Qt获取设备环境变量
  9. Excel如何将数据填充完下方的空白单元格
  10. 互联网产品经理的工作职责
  11. 数字签名与数字加密的区别
  12. Java2实用教程(第五版)/第五章例题
  13. CC1310空中升级笔记02 CC26xx_CC13xx_BLE_OAD_例程梳理
  14. ORACLE导出表数据-dmp文件
  15. Your build settings specify a provisioning profile with the UUID, no provisioni(没多大用)
  16. web端腾讯PAG初体验
  17. 灵机一动-趣味问题种种
  18. internal/modules/cjs/loader.js:584 issue
  19. js实现鼠标悬浮元素出现/隐藏效果
  20. 新人百度百科怎么做_如何做新人百科技巧分享

热门文章

  1. 中国Linux界的一些牛人(部分)
  2. 分享写SQL的21个好习惯!
  3. java爬取国家应急平台漏洞公告数据
  4. c/c++ 二维数组指针参数传递 矩阵计算实例
  5. android 壁纸存储位置,手机图片去了哪?教你理清照片存放路径(全文)
  6. Excel VBA为表格设置“打开文件密码”
  7. 免费把自己写的网页上传到网上(腾讯云)
  8. 计算机存储程序的理论由谁提出,存储程序的概念是由谁提出来的
  9. 2429: [HAOI2006]聪明的猴子
  10. Android高级-笔记