首页 > 其他分享 >开餐馆

开餐馆

时间:2023-05-31 18:23:08浏览次数:28  
标签:位置 int 30 测试数据 餐馆 m2

题目描述

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

输入

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

第一行是整数 T (1≤T≤1000)(1 \le T \le 1000)(1≤T≤1000),表明有 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 且为整数)))。

输出

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

输入输出样例

样例输入 #1

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

样例输出 #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;
}

 

 

标签:位置,int,30,测试数据,餐馆,m2
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17447003.html

相关文章

  • C/C++在线餐馆预订管理系统
    C/C++在线餐馆预订管理系统软件学院实训任务书一、实训名称实践环节数据结构与算法实训项目名称在线餐馆预订管理系统二、学生信息班级......
  • #yyds干货盘点# 名企真题专题:餐馆
    1.简述:描述某餐馆有n张桌子,每张桌子有一个参数:a可容纳的最大人数;有m批客人,每批客人有两个参数:b人数,c预计消费金额。在不允许拼桌的情况下,请实现一个算法选择其中一部分......
  • C/C++ 小型餐馆订餐管理系统
    C/C++小型餐馆订餐管理系统课题7小型餐馆订餐管理系统1.任务描述开发一个小型餐馆管理系统,对餐馆包房订座预约进行管理。具体订餐信息包括:包间编号、包间类型(考虑......