【经典线性 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月前
【每日一题Day243】LC1595连通两组点的最小成本 | 状态压缩dp
【每日一题Day243】LC1595连通两组点的最小成本 | 状态压缩dp
57 0
|
6月前
【每日一题Day357】LC1155掷骰子等于目标和的方法数 | dp
【每日一题Day357】LC1155掷骰子等于目标和的方法数 | dp
55 0
|
6月前
【错题集-编程题】删除相邻数字的最大分数(动态规划 - 线性 dp)
【错题集-编程题】删除相邻数字的最大分数(动态规划 - 线性 dp)
|
6月前
每日一题(最大连续1的个数,完全数计算)
每日一题(最大连续1的个数,完全数计算)
30 0
|
6月前
|
人工智能 算法 Java
数据结构与算法面试题:给定 n 个非负整数 a1,a2,a3,...,an,每个数代表坐标中的一个点(i, ai),请找出两个点之间的最大距离。(提示:动态规划)
数据结构与算法面试题:给定 n 个非负整数 a1,a2,a3,...,an,每个数代表坐标中的一个点(i, ai),请找出两个点之间的最大距离。(提示:动态规划)
89 1
|
11月前
|
算法 测试技术 C#
C++前缀和算法的应用:最大化城市的最小供电站数目(二)
C++前缀和算法的应用:最大化城市的最小供电站数目
|
11月前
|
算法 测试技术 C++
C++前缀和算法的应用:最大化城市的最小供电站数目(一)
C++前缀和算法的应用:最大化城市的最小供电站数目
|
6月前
|
人工智能
力扣每日一题 -- 2919. 使数组变美的最小增量运算数
力扣每日一题 -- 2919. 使数组变美的最小增量运算数
|
算法 C++ Python
【每日算法Day 90】5种方法:求解数组中出现次数超过一半的那个数
【每日算法Day 90】5种方法:求解数组中出现次数超过一半的那个数
168 0
|
算法 C++ Python
【每日算法Day 91】求解数组中出现次数超过1/3的那个数
【每日算法Day 91】求解数组中出现次数超过1/3的那个数