间隔时间表问题有关从每个间隔选择相同时间长度的问题
Interval schedule question about choose the same length of time from each interval
我在间隔时间表问题上挣扎,问题描述如下:
描述:Lanran有n个朋友。每个星期日,兰兰都必须玩 和他的朋友。第三朋友可以从时间A到Lanran玩 时间B(包括A和B)。但是,Lanran必须与每个 他的朋友的时间相同。兰兰想和 他的朋友尽可能长。但是他很愚蠢。所以他要求 您的帮助来计算他可以玩的最大时间 朋友。
输入第一行包含一个整数n。下一个n(n< = 5000)线包含两个整数A和B(1< = a,b< = 10000),它们 显示第三朋友的时间间隔。
输出输出一个整数,显示Lanran可以播放的最大时间 和他的每个朋友一起。
我认为这是一个贪婪的问题,我选择了最少的时间朋友,这是已经玩过的时间 可能的上场时间,直到b的朋友,然后在第三秒与他一起玩。这是代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 5010;
int n, s[N], e[N], cnt[N], me;
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int low, int high) {
int pivot = s[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (s[j] <= pivot) {
i++;
swap(&s[i], &s[j]);
swap(&e[i], &e[j]);
}
}
swap(&s[i + 1], &s[high]);
swap(&e[i + 1], &e[high]);
return (i + 1);
}
void quickSort(int low, int high) {
if (low < high) {
int pi = partition(low, high);
quickSort(low, pi - 1);
quickSort(pi + 1, high);
}
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%d%d", &s[i], &e[i]);
if (e[i] < s[i]) { printf("0n"); return 0; }
if (e[i] > me) me = e[i];
}
quickSort(0, n - 1);
for (int i = 1; i <= me; ++i) {
int id = -1, mi = 0x7fffffff;
for (int j = 0; j < n; ++j) {
if (s[j] > i || i > e[j]) continue;
if (cnt[j] + e[j] - i + 1 < mi) { id = j; mi = cnt[j] + e[j] - i + 1; }
}
++cnt[id];
}
int ans = 0x7fffffff;
for (int i = 0; i < n; ++i) if (cnt[i] < ans) ans = cnt[i];
printf("%dn", ans);
return 0;
}
所以我会错吗?我在10个测试用例中得到了7个错误的答案。
看起来与标准活动选择问题相同。我粘贴了相关的标准算法。您可以找到Wiki:https://en.wikipedia.org/wiki/activitive_selection_problem。贪婪的词Activity-Selector(a,s,f):
Sort A by finish times stored in f
S = {A[1]}
k = 1
n = A.length
for i = 2 to n:
if s[i] ≥ f[k]:
S = S U {A[i]}
k = i
return S
相关文章:
- 如何在不到O(N)的时间内解决这个问题?
- 使用同一类中的方法重新分配字段时出现问题
- asio::read() 需要很长时间,使用 asio::write 没有问题
- 我们能否降低最大赢家问题的时间复杂度?
- 在 MacOS 上C++:显示日期和时间问题
- 解决这个问题的时间复杂性是多少
- 图问题:找出两个节点是否在每个节点的O(1)时间和O(2)存储中共享同一分支
- 为什么我的代码在"decrease to zero"问题中被时间超过了
- std::chrono 的问题:重置时间
- 递归回文问题的时间复杂度,C++
- time_t的时钟周期和获取时间问题
- 简单的最大除数问题 c++ 实现抛出时间限制已超出
- 提升,从字符串问题中获得时间
- Linux 测量时间问题! std::chrono, QueryPerformanceCounter, clock_ge
- 扩展中的日期时间对象方法C++问题
- 尝试构造包装器测量函数调用时间时出现问题
- 一个足够大的问题大小 C++ 需要 0 个运行时间
- 我的开关菜单在一段时间循环中出现问题
- 如何降低此问题中的时间复杂度
- 快速排序,助手类问题,时间排序,矢量,c++