目录
- T1. 开餐馆
- 思路分析
- T2. 邮票收集
- 思路分析
- T3. 带通配符的字符串匹配
- 思路分析
- T4. 删除数字
- 思路分析
T1. 开餐馆
北大信息学院的同学小明毕业之后打算创业开餐馆。现在共有 n n n 个地点可供选择。小明打算从中选择合适的位置开设一些餐馆。这 n n n 个地点排列在同一条直线上。我们用一个整数序列 m 1 , m 2 , … m n m_1, m_2, … m_n m1,m2,…mn 来表示他们的相对位置。由于地段关系,开餐馆的利润会有所不同。我们用 p i p_i pi 表示在 m i m_i mi 处开餐馆的利润。为了避免自己的餐馆的内部竞争,餐馆之间的距离必须大于 k k k。请你帮助小明选择一个总利润最大的方案。
时间限制:1 s
内存限制:64 MB
- 输入
标准的输入包含若干组测试数据。
输入第一行是整数 T ( 1 ≤ T ≤ 1000 ) T\ (1 \le T \le 1000) T (1≤T≤1000),表明有 T T T 组测试数据。紧接着有 T T T 组连续的测试,每组测试数据有 3 3 3 行。
第 1 1 1 行:地点总数 n ( n < 100 ) n\ (n < 100) n (n<100),距离限制 k ( 0 < k < 1000 ) k\ (0 < k < 1000) k (0<k<1000)。
第 2 2 2 行: n n n 个地点的位置 m 1 , m 2 , … m n m_1, m_2, … m_n m1,m2,…mn( 0 < m i < 1000000 0 < m_i < 1000000 0<mi<1000000 且为整数,升序排列)
第 3 3 3 行: n n n 个地点的餐馆利润 p 1 , p 2 , … p n p_1, p_2, … p_n p1,p2,…pn( 0 < p i < 1000 0 < p_i < 1000 0<pi<1000 且为整数) - 输出
对于每组测试数据可能的最大利润。 - 样例输入
2 3 11 1 2 15 10 2 30 3 16 1 2 15 10 2 30
- 样例输出
40 30
思路分析
此题考查动态规划算法,属于基础题。
定义 f i f_i fi 表示在第 i i i 个地点开餐馆可以获得的最大利润,则不难得出状态转移方程为 f i = max { f i , f j + p i } f_i = \max\{f_i, f_j + p_i\} fi=max{fi,fj+pi},其中 m j + k < m i m_j + k < m_i mj+k<mi,初始条件为 f i = p i f_i = p_i fi=pi。最终 max { f i } \max\{f_i\} max{fi} 即为答案。
/** Name: T1.cpp* Problem: 开餐馆* Author: Teacher Gao.* Date&Time: 2024/12/4 14:40*/#include <iostream>using namespace std;inline int max(int a, int b) { return a > b ? a : b; }int