1296:开餐馆

【题目描述】信息学院的同学小明毕业之后打算创业开餐馆.现在共有nn

个地点可供选择。小明打算从中选择合适的位置开设一些餐馆。这 nn

个地点排列在同一条直线上。我们用一个整数序列m1,m2,…mnm1,m2,…mn

来表示他们的相对位置。由于地段关系,开餐馆的利润会有所不同。我们用pipi

表示在mimi

处开餐馆的利润。为了避免自己的餐馆的内部竞争,餐馆之间的距离必须大于kk

。请你帮助小明选择一个总利润最大的方案。【输入】输入第一行是整数 T(1≤T≤1000)T(1≤T≤1000)

,表明有T组测试数据。紧接着有TT

组连续的测试。每组测试数据有33

行。第1行:地点总数n(n<100)n(n<100)

, 距离限制k(k>0且k<1000)k(k>0且k<1000)

;第2行:n 个地点的位置m1,m2,…mn(1000000>mi>0m1,m2,…mn(1000000>mi>0

且为整数,升序排列);第3行:n 个地点的餐馆利润p1,p2,…pn(1000>pi>0p1,p2,…pn(1000>pi>0

且为整数)。【输出】对于每组测试数据可能的最大利润。【输入样例】2
3 11
1 2 15
10 2 30
3 16
1 2 15
10 2 30【输出样例】40
30

思路:
对于这道题目,信息学奥赛一本通c++在线测试将其归于背包问题,但是我更倾向于用类似与最长上升子序列的思想来思考。
emmm,这道题用背包的方法的话,要列举所有的距离,一位数组长达1000000,太大了。所以用类似与最长上升子序列的思想来做。就是用数组 a记录,a[i] 表示考虑建造这个餐馆的话能够达到的最大利益。因为餐馆的距离正好是上升序列给出的,所以我们每次确定 a[i] 的时候可以从前面寻找能够建造这个餐馆(距离>k)的记录的最大值,然后加上这个餐馆的利益,就求出了如果能够建造这个餐馆,能得到的最大利益了。
最后在n个建造自己餐馆得到最大利益的记录重寻找最大值,就是答案。

代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
//思路:用最长上升子序列的思想,从前面的单元格中寻找能够建造这个餐馆的能够达到的最大利益
//每个单元格 记录如果能够建造这个餐馆的最大利益 int main()
{int t;cin>>t;int a[100];//记录建造这个餐馆能够获得的最大利益int m[100];//各个餐馆的位置 int v[100];//每个餐馆的利益 for(int ti=1;ti<=t;ti++)//t组测试数据 {int n;//餐馆的个数int k;//限制距离cin>>n>>k;memset(a,0,sizeof(a));memset(m,0,sizeof(m));memset(v,0,sizeof(v));for(int i=1;i<=n;i++){cin>>m[i];}for(int i=1;i<=n;i++){cin>>v[i];a[i]=v[i];//初始化 }//过程求解  for(int i=1;i<=n;i++)//逐步考虑每个餐馆{for(int j=i;j>=1;j--)//j代表前面的餐馆号 {if(m[i]-m[j]>k)//基于前面的,找出能够建造这个餐馆的最大利益 { a[i]=max(a[j]+v[i],a[i]);//建造这餐馆能够获得的最大利益 }} } //在n个记录中寻找利益的最大值 int max=0;for(int i=1;i<=n;i++){if(max<a[i])max=a[i]; }cout<<max<<endl; }return 0;
}

自我总结: 动态规划中最长上升子序列思想和背包问题的区别

动态规划中,最长上升子序列思想和背包问题思想的区别:

  • 最长上升子序列问题也是用数组记录最值,但是,是从前面能够满足条件的记录中寻找最值,记录的是要求必须加上这个物体的最值。
  • 背包问题虽然也是利用数组记录,但是记录的是在这个代价下,能够得到的最好结果值,也就是这个物体可以加上也可以不加上。
  • 所以最长上升子序列问题思想 内部遍历一次确定一个加上了这个物体的最优值;背包问题 内部遍历一次确定的是考虑了这个物体后(可以加可以不加),确定的是所有代价下的最好结果值。

开餐馆(DP)(+两种思想总结)相关推荐

  1. Android Studio打不开虚拟机,两种情况详解

    Android Studio打不开虚拟机,两种情况详解 文章目录 Android Studio打不开虚拟机,两种情况详解 1.VT-x is disabled in BIOS 2.Emulator文件 ...

  2. edge不能打开html网页,win10自带浏览器Edge打不开网页的两种修复方法

    Windows10专业版自带的Edge浏览器十分好用,其实内置很多其他浏览器没有的功能,深受网友们喜爱.不过在使用过程中也遇到一点问题,比如Edge打不开网页,不懂哪里出现问题,尝试多次还是一样.大家 ...

  3. 桌面打不开计算机控制面板,电脑控制面板打不开怎么办?两种解决方法

    日常生活中,如果你遇到一些小的电脑故障,可以通过控制面板进行设置管理,尝试修复故障,如果打不开控制面板,势必影响正常办公.针对小伙伴反映的控制面板打不开的问题,大家可以参考以下两种解决方法. 电脑控制 ...

  4. 回溯法、分支限界法两种思想帮你轻松搞定旅行售货员问题(TSP)

    问题描述 某售货员要到若干城市去推销商品,已知各城市之间的路线(或旅费).要选定一条从驻地出发,经过每个城市一遍,最后回到驻地的路线,使总的路程(或总旅费)最小.本文只考虑4个城市的情况,下面这个带权 ...

  5. xp系统打不开vba服务器,WinXp系统无法打开控制面板怎么办?Xp系统打不开控制面板的两种解决方法...

    WinXp系统下,我们可以通过windows控制面板实现设置系统外观和主题.添加/删除程序等功能.不过,最近却有些XP用户反映自己在打开控制面板时,遇到了无法打开的问题.这该怎么办呢?接下来,小编就向 ...

  6. 2020牛客多校G[并查集的两种思想,按秩合并+路径压缩]

    题目链接 题目大意:就是有n个点m条边,每次第i个点属于第i个联通块,现在有q次询问给你一个数o,如果o这个联通块没有相连的联通块就没什么事情发生,如果有的话,就将这几个点的联通块都并入o所在的联通块 ...

  7. 两种思想实现基于jquery的延时导航菜单,可做延时触发器!

    1. 函数式 html如下: <div class="box"><ul class="clear-fix"><li class=& ...

  8. 二叉树层序遍历分层[递归迭代两种思想+三种解法]

    层序遍历分层的递归迭代解法 前言 一.二叉树层序遍历分层 二.递归与迭代 总结 参考文献 前言 层序遍历作为二叉树遍历的基本遍历,一般来说只能用迭代来解.但是分层输出则既可用迭代,又可配合level用 ...

  9. JAVA实现开根号的两种方式:二分法以及牛顿迭代法

    public class demo {public static void main(String[] args) {System.out.println("---- 二分法计算根号 --- ...

最新文章

  1. 2019年必须掌握的29个微服务面试问题(下)
  2. 微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”...
  3. “逃离大厦”游戏的破解
  4. Linux 上安装 appium
  5. 网络编程释疑之:TCP协议的“流”特性
  6. DM6446 OSD
  7. 腾讯地图判断点是否在区域内
  8. 机器学习之决策树与随机森林
  9. nginx日志格式、参数及切分
  10. windows 服务实现定时任务调度(Quartz.Net)
  11. shell 字符(串)处理命令
  12. 【mybatis深度历险系列】mybatis中的动态sql
  13. rostcm6情感分析案例分析_ROSTCM6 情感分析软件 这款软件能分析文章中所表达的情绪内容 从而帮助使用者得出文章的情绪 - 下载 - 搜珍网...
  14. java jemalloc_jemalloc 快速上手攻略
  15. 42道计算机网络面试高频题+答案,面试官喜欢的答案都在这里
  16. 新闻文本分类学习笔记
  17. 大数据周周看:金融科技公司融360赴美IPO,小蓝单车人去楼空,用户押金退还困难
  18. 10款免费原型设计工具,产品设计得力助手
  19. 软件安全漏洞测试报告_现实生活中的软件安全漏洞以及如何确保安全
  20. 利用BSCScan获取账户交易记录

热门文章

  1. python3.5 模拟三级菜单
  2. CANoe:入门介绍
  3. 四平青年背景音乐及经典台词选
  4. 手机、AI、VR、无人机、智能汽车等8大行业中的智能传感器是怎样运作的?
  5. 7-1 输出2到n之间的全部素数(PTA程序设计)
  6. SonarQube使用教程及案例
  7. 名帖124 陆师道 小楷《瀛洲赋》
  8. webbench 下载_linux 安装webbench
  9. 真正带你搞懂RecyclerView的缓存机制,算法太TM重要了
  10. 情人节福利:京东上线“白条”业务可先购物后付款,最高可预支1.5万