【t081】序列长度(贪心做法)
序列 长度 贪心 做法
2023-09-14 09:03:48 时间
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
有一个整数序列,我们不知道她的长度是多少(即序列中整数的个数),但我们知道在某些区间中至少有多少个整数,用区间
[ai,bi,ci]来描述它,[ai,bi,ci]表示在该序列中处于[ai,bi]这个区间的整数至少有ci个。现在给出若干个这样的区间,
请你求出满足条件的最短序列长度是多少。如果不存在则输出 -1。
【输入格式】
第一行包括一个整数n(n<=1000),表示区间个数;
以下n行每行描述这些区间,第i+1行三个整数ai,bi,ci,由空格隔开,其中0<=ai<=bi<=1000 而且 1<=ci<=bi-ai+1。
【输出格式】
文件输出只有一个整数表示满足要求序列长度的最小值。
Sample Input
5
3 7 3
8 10 3
6 8 1
1 3 1
10 11 1
Sample Output
6
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t081
【题解】
先把n个ai,bi,ci按照ai第一关键字,bi第二关键字升序排;
然后逆序处理n个关系;
优先选ai..bi这个区间里面的前面部分(当然如果这个区间里面有些数字已经被选了就不用再选了),这样优先选前面的部分,就能让前面的关系更容易利用公共的部分;就是这样的贪心吧.
转换成编程语言就是升序枚举啦^_^
(想不出来什么情况会无解..)
【完整代码】
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 1000+100;
struct abc
{
int a,b,c;
friend bool operator < (abc x,abc y)
{
if (x.a==y.a)
{
if (x.b==y.b)
return true;
else
return x.b<y.b;
}
else
return x.a < y.a;
}
};
int n;
bool bo[MAXN];
abc t[MAXN];
int main()
{
//freopen("F:\\rush.txt","r",stdin);
scanf("%d",&n);
for (int i = 1;i <= n;i++)
scanf("%d%d%d",&t[i].a,&t[i].b,&t[i].c);
sort(t+1,t+1+n);
for (int i = n;i >= 1;i--)
{
for (int j = t[i].a;j <= t[i].b;j++)
if (bo[j])
{
t[i].c--;
if (t[i].c==0)
break;
}
if (t[i].c!=0)
{
for (int j = t[i].a;j <= t[i].b;j++)
if (!bo[j])
{
t[i].c--;
bo[j] = true;
if (t[i].c==0)
break;
}
}
}
int si = 0;
for (int i = 0;i <= 1000;i++)
if (bo[i])
si++;
printf("%d\n",si);
return 0;
}
相关文章
- 求解最长递增子序列长度|动态规划+二分查找:CC++实现
- 【华为云技术分享】序列特征的处理方法之二:基于卷积神经网络方法
- Java实现 LeetCode 521 最长特殊序列 Ⅰ(出题人:“就是喜欢看你们不敢相信那么简单,又不敢提交的样子。”)...
- Leetcode0521: 最长特殊序列 Ⅰ(simple, 字符串处理)
- QuantitativeFinance:量化金融之金融时间序列分析之ES/ETS/GARCH模型的简介、Box-Jenkins方法-AR/MA/ARMA/ARIMA模型的简介及其建模四大步骤之详细攻略
- 基于FPGA的直接序列扩频通信verilog设计,包括汉明编译码,扩频解扩,同步模块以及testbench
- 状态机-非重叠的序列检测
- 生信-序列比较dp[未完成]
- 有效的括号序列——算法面试刷题4(for google),考察stack
- Facebook开源时间序列内存数据库Beringei,追求极致压缩率——如果是int根据大多数时间序列中的值与相邻数据点相比并没有显著的变化,只要使用XOR将当前值与先前值进行比较,然后存储发生变化的比特。最终,该算法将整个数据集至少压缩了90%
- OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念
- lucene底层数据结构——底层filter bitset原理,时间序列数据压缩将同一时间数据压缩为一行
- 【生成有序序列】借鉴雪花算法实现的一种长度更短的有序序列生成算法
- Leetcodd.673 最长递增子序列的个数