SDUT 2021 Autumn Team Contest 36th G - Alice’s Stamps(补)
队友做出的这个题,赛后补的=、=
G - Alice’s Stamps (一般DP)
题目大意 :给你m个区间,选k个,求k个区间并集
1≤T≤100
1≤K≤M
1≤N,M≤2000
1≤Li≤ Ri ≤N
输出 :满足题意的最大的区间并
分析:
纯看数据范围很像是一般的背包dp,但是和常规背包不同,更像是一般的线性dp。同时一般的背包思维也不好想这个题。但我们用线性思维,先找出当前点在所有包含区间中的最左边界,(队友用当前点的最右边界写的也可过)
然后我们dp[i][j]表示为从左到j的区间内选i个区间的最大答案.
状态取 max.
(b[i]就是当前点的最小左区间在哪)然后能得dp方程 :
dp[i][j + 1] = max(max(dp[i][j + 1], dp[i][j]), dp[i - 1][b[j]] + j - b[j] + 1);
C++代码
/*made in dirt & sand */
#include <bits/stdc++.h>
#include <deque>
#define bug(a) cout << a << endl
#define mem(a, b) memset(a, b, sizeof a)
#define bug2(a, b) cout << a << ' ' << b << endl
#define bug3(a, b, c) cout << a << ' ' << b << ' ' << c << endl
#define lowbit(x) (x & -x)
#define pb push_back
#define int long long
#define x first
#define y second
#define pii pair<int, int>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 1e5 + 10, M = 1e7 + 10;
const int inf = 1e-6;
int i, j, k, n, m, l, x, y, t, ge, hao, ans[N], b[N], d[N];
vector<int> mp[N];
bool p[N];
struct ss
{
int x, y;
} a[N];
int dp[2010][2010];
bool cmp(ss x, ss y)
{
return x.x < y.x;
}
signed main()
{
// freopen("black.in","r",stdin);
std::ios::sync_with_stdio(false);
cin.tie(0);
int ans = 0;
int T;
cin >> T;
for (int ii = 1; ii <= T; ii++)
{
cin >> n >> m >> k;
for (i = 1; i <= n; i++)
b[i] = n + 10;
for (i = 0; i < m; i++)
{
cin >> a[i].x >> a[i].y;
}
sort(a, a + m, cmp);
int l = 1;
for (i = 0; i < m; i++)
{
for (; l <= a[i].y; l++)
{
b[l] = a[i].x;
}
}
for (j = 1; j <= n; j++)
{
for (i = 1; i <= k; i++)
{
dp[i][j + 1] = max(max(dp[i][j + 1], dp[i][j]), dp[i - 1][b[j]] + j - b[j] + 1);
}
ans = dp[k][j+1];
}
for(int nn = 0 ; nn <= m + 10 ; nn ++ ){
for(int mm = 0 ; mm <= n+11 ; mm ++ ){
dp[nn][mm] = 0;
}
}
printf("Case #%d: %lld\n", ii, ans);
}
}
调Bug闲聊
一直改不对,一开始是dp数组没初始化,后来初始化没干净,都初始化了也没找到哪里错了,后来是dp数组放前面初始化了。放到后面就初始化干净的原因是,b数组初始化的有点问题导致引用到上一个状态的dp数组,而上一个状态的dp数组没有完全初始化。现在想起来能调出来是真的离谱。。。
SDUT 2021 Autumn Team Contest 36th G - Alice’s Stamps(补)的更多相关文章
- SDUT 2022 Autumn Team Contest 7th
1.J题:给你T组数据,每一组数据给你一个区间,让你求这个区间的范围,区间的起始时间和终止时间可能被包含或重复 思路:思路的话,就是直接把给定的两个区间的之间的数包括端点存到vector去重,然后直接 ...
- Hdu-6249 2017CCPC-Final G.Alice’s Stamps 动态规划
题面 题意:给你n个集合,每个集合有L到R这些种类的邮票,让你选择其中的K个集合,使得最后选择的邮票种类尽可能多,N,L,R都<=2000 题解:容易乱想到网络流,可是再细想一下就会发现处理不了 ...
- Alice’s Stamps HDU - 6249 (区间DP)
点击传送 Alice’s Stamps Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- April Fools Day Contest 2016 G. You're a Professional
G. You're a Professional 题目连接: http://www.codeforces.com/contest/656/problem/G Description A simple ...
- Nordic Collegiate Programming Contest 2015 G. Goblin Garden Guards
In an unprecedented turn of events, goblins recently launched an invasion against the Nedewsian city ...
- 2016 Multi-University Training Contest 1 G. Rigid Frameworks
Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- The 15th UESTC Programming Contest Preliminary G - GC?(X,Y) cdoj1564
地址:http://acm.uestc.edu.cn/#/problem/show/1564 题目: G - GC?(X,Y) Time Limit: 3000/1000MS (Java/Others ...
- 2014-2015 ACM-ICPC, NEERC, Eastern Subregional Contest Problem G. The Debut Album
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229669 时间限制:1s 空间限制:64MB 题目大意:给定n,a,b的值 求一个长度为n的 ...
- Asia Yokohama Regional Contest 2018 G题 What Goes Up Must Come Down
链接 G题 https://codeforces.com/gym/102082 使其成为单峰序列需要交换多少次相邻的数. 树状数组维护逆序对. 对于每个序列中的数,要么在单峰的左侧,要么在单峰的右侧, ...
- 【cf contest 1119 G】Get Ready for the Battle
题目 你有\(n\)个士兵,需要将他们分成\(m\)组,每组可以为0: 现在这些士兵要去攻打\(m\)个敌人,每个敌人的生命值为\(hp_i\) : 一轮游戏中一组士兵选定一个攻打的敌人,敌人生命值- ...
随机推荐
- 瑞芯微 | 摄像头ov13850移植笔记
<1.瑞芯微rk356x板子快速上手> <2.Linux驱动|瑞芯微rtc-hym8563移植笔记> <3.Linux驱动 | Linux内核 RTC时间架构-基于瑞芯微 ...
- 有没有一个适合初学者学习的基于linux的嵌入式综合项目?
一.前言 很多粉丝问我,有没有一个适合初学者学习的嵌入式的Linux的项目? 我之前陆陆续续写过一些适合新手的小项目: <从0写一个<电话号码管理系统>的C入门项目[适合初学者]&g ...
- 代码随想录Day21
669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high.通过修剪二叉搜索树,使得所有节点的值在[low, high]中.修剪树 不应该 改变保留在树 ...
- Uncaught SyntaxError: The requested module ‘/node_modules/.vite/vue-router.js?v=2f0f3daf’ does not provide an export named ‘VueRouter’
Uncaught SyntaxError: The requested module '/node_modules/.vite/vue-router.js?v=2f0f3daf' does not p ...
- ES6中对数组的数据进行排序
今天在工作中遇到了要对多选数据进行排序的一个功能,在此学习记录一下. 实现效果:点击左边的向下或者向上排序的按钮实现数据的排序. 选择第二个向下排序,结果如下: 具体方法如下: //找到原来需要排序的 ...
- SQL Server使用脚本实现自动备份
因服务器安装的SQL Server版本不支持自动定时备份,需自行实现,大概思路为: 创建备份数据库的脚本 创建批处理脚本执行步骤一中的脚本 创建Windows定时任务执行步骤二中的脚本 1. 创建SQ ...
- c++字符编码转换
c++字符编码转换 简述 字符编码一直是软件开发中很麻烦的问题.当前项目开发普遍使用的字符集是utf-8,而windows系统则默认是gbk,linux默认编码则是utf-8,所以想要开发一个在win ...
- 【YashanDB知识库】ycm托管数据库时报错OM host ip:127.0.0.1 is not support join to YCM
问题现象 托管数据库时检查报错OM的IP是127.0.0.1,不支持托管到YCM OM 问题的风险及影响 导致数据库无法托管监控 问题影响的版本 问题发生原因 安装数据库时修改了OM的监听ip为127 ...
- Java 多个String(字符串)判断是否null(空值)
Java 多个String(字符串)判断是否null(空值) 示例: String s = null; if (str1 != null) { s = str1; } else if (str2 != ...
- Argo CD初体验
什么是 Argo CD? Argo CD 是一个声明式的 GitOps 持续交付工具,用于 Kubernetes 集群.它通过持续监控 Git 仓库中的 Kubernetes 资源配置文件,将这些配置 ...