【经典线性 DP】数组最小间隔为k的和值最大 | 河北省赛 7-8 H-信号传输

简介: 笔记

题目描述


10.png

输入格式

11.png

输出格式

输出一行仅一个整数,表示建造的信号传输通道最大的优质指数。如果无解,输出-1。


输入样例:


11 12
1 2 1 2 6 2 1 2 1 2 1


输出样例:


2


题意


在不低于 W WW 的满意度下,使得两信号站之间距离最大。


即:给你一个数组,选 x xx 个位置之和 ≥ W \geq W≥W,求相邻两位置的间隔的最大值。


思路



12.png

代码:


int n, w;
int a[N], f[N];
bool check(int x) {
  memset(f, 0, sizeof f);
  for (int i = 1; i <= n ;i++) {
    f[i] = f[i - 1];
    if (i >= x && i <= n - x + 1)
      f[i] = max(f[i], f[i - x] + a[i]);
  }
  return f[n] >= w;
}
void solve() {
  cin >> n >> w;
  int sum = 0;
  for (int i = 1; i <= n; i++) cin >> a[i], sum += a[i];
  if (sum < w) { cout << -1 << endl; return ; } // 特判 -1
  if (w == 0) { cout << n + 1 << endl; return ; } // 特殊的 w==0
  int l = 1, r = n;
  while (l < r) {
    int mid = l + r + 1 >> 1;
    if (check(mid)) l = mid;
    else r = mid - 1;
  }
  cout << l << endl; 
}
相关文章
|
6月前
|
算法 测试技术
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
|
6月前
【每日一题Day357】LC1155掷骰子等于目标和的方法数 | dp
【每日一题Day357】LC1155掷骰子等于目标和的方法数 | dp
55 0
|
6月前
【错题集-编程题】删除相邻数字的最大分数(动态规划 - 线性 dp)
【错题集-编程题】删除相邻数字的最大分数(动态规划 - 线性 dp)
|
6月前
|
算法 测试技术
day2·算法-快乐数-有效三角形个数
day2·算法-快乐数-有效三角形个数
37 0
|
6月前
|
算法 Python C++
C/C++每日一练(20230425) 成绩分布、汇总区间、矩阵置零
C/C++每日一练(20230425) 成绩分布、汇总区间、矩阵置零
63 0
C/C++每日一练(20230425) 成绩分布、汇总区间、矩阵置零
|
6月前
|
人工智能 算法 Java
数据结构与算法面试题:给定 n 个非负整数 a1,a2,a3,...,an,每个数代表坐标中的一个点(i, ai),请找出两个点之间的最大距离。(提示:动态规划)
数据结构与算法面试题:给定 n 个非负整数 a1,a2,a3,...,an,每个数代表坐标中的一个点(i, ai),请找出两个点之间的最大距离。(提示:动态规划)
89 1
|
6月前
leetcode-1380:矩阵中的幸运数
leetcode-1380:矩阵中的幸运数
36 0
|
C++
(排列,选择类dp)(数论同余定理,同余运算)(以背包为母题)1214. 波动数列
(排列,选择类dp)(数论同余定理,同余运算)(以背包为母题)1214. 波动数列
95 0
|
索引
每日一题—— 最小差值 I
每日一题—— 最小差值 I
159 0
每日一题—— 最小差值 I
|
Python
LeetCode 1380. 矩阵中的幸运数
给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
98 0