开餐馆

1|0题目描述

北大信息学院的同学小明毕业之后打算创业开餐馆。现在共有 nnn 个地点可供选择,小明打算从中选择合适的位置开设一些餐馆。这  nnn 个地点排列在同一条直线上。我们用一个整数序列 m1,m2,…,mnm_1, m_2, \dots , m_nm1,m2,,mn 来表示他们的相对位置。由于地段关系,开餐馆的利润会有所不同。我们用 pip_ipi 表示在 mim_imi 处开餐馆的利润。为了避免自己的餐馆的内部竞争,餐馆之间的距离必须大于 kkk。请你帮助小明选择一个总利润最大的方案。

2|0输入

输入包含若干组测试数据。

第一行是整数 T (1≤T≤1000)(1 \le T \le 1000)(1T1000),表明有 T组测试数据。

紧接着有 T 组连续的测试。每组测试数据有 333 行。

1 行: 地点总数 n (n<100)(n \lt 100)(n<100),距离限制 k (0<k<1000)(0 \lt k \lt 1000)(0<k<1000)。

2 行: n个地点的位置 m1,m2,…,mnm_1, m_2, \dots, m_nm1,m2,,mn (0<mi<1000000(0 \lt m_i \lt 1000000(0<mi<1000000 且为整数,升序排列)))。

3 行: n个地点的餐馆利润 p1,p2,…,pnp_1, p_2, \dots, p_np1,p2,,pn (0<pi<1000(0 \lt p_i \lt 1000(0<pi<1000 且为整数)))。

3|0输出

对于每组测试数据可能的最大利润。

4|0输入输出样例

4|1样例输入 #1

2 3 11 1 2 15 10 2 30 3 16 1 2 15 10 2 30

4|2样例输出 #1

40 30
复制代码
//感觉还是背包问题,和背包差不多但又不是背包; //整体思路如下,当我们考虑要不要建的时候,首先判断,能不能建; //f数组表示的是第i位置的餐馆能获得的最大利益,所以每次都要在i位置和前i个位置进行比较,然后获取最大值; //如果符合条件,然后进入规划,i位置的餐馆,如果我不在这个位置建,那我就是i-1的价值,如果我要建,那就是在j位置1建一个价值pi的餐馆 //然后两者比较 #include<bits/stdc++.h> using namespace std; const int N=10000; int t,n,k,m[N],p[N],f[N]; int main() { cin>>t; while(t--) { memset(f,0,sizeof f); for(int i=1;i<=n;i++) cin>>m[i]; for(int i=1;i<=n;i++) cin>>p[i]; f[1]=p[1]; for(int i=1;i<=n;i++) for(int j=1;j<i;j++) if(m[i]-m[j]>k) f[i]=max(f[i-1],f[j]+p[i]); cout<<f[n]<<endl; } return 0; }
复制代码

 

 

__EOF__

本文作者Sakurajimamai
本文链接https://www.cnblogs.com/o-Sakurajimamai-o/p/17447003.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   o-Sakurajimamai-o  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
-- --
点击右上角即可分享
微信分享提示