Codeforces 1131G(dp)
传送门
与Codeforces1107G一起食用
思路
- 想到要用dp……然后常规地设dp[i]为推倒前i个牌的最小花费
- 有两种情况:一是当前这个推,二是不推而被别人推。对于第一种,需要找到这个左推(因为扫到这里他是最后一个所以不用右推)的最远处,于是有了预处理每一位的最左边;对于第二种,巨弱鲁莽地优先队列搞了,看大佬代码直接单调栈快了我好几倍,菜不成声。
const int maxn = 25e4 + 5, maxm = 1e7 + 5;
int n, m, k[maxn], q, tot, h[maxm], L[maxm], R[maxm];
ll val[maxm], dp[maxm];
vector<int> a[maxn];
vector<ll> c[maxn];
void Read() {
	read(n), read(m);
	rep(i, 1, n) {
		read(k[i]);
		rep(j, 1, k[i]) {
			int aa;
			read(aa);
			a[i].push_back(aa);
		}
		rep(j, 1, k[i]) {
			ll cc;
			read(cc);
			c[i].push_back(cc);
		}
	}
	for (read(q); q; q--) {
		int id, mul;
		read(id), read(mul);
		rep(i, 1, k[id]) {
			h[tot + i] = a[id][i - 1];
			val[tot + i] = c[id][i - 1] * mul;
		}
		tot += k[id];
	}
}
void Pre() {
	stack<pii> st;
	rep(i, 1, m) {
		int l = max(1, i - h[i] + 1);
		while (!st.empty() && st.top().second >= l)	st.pop();
		if (st.size() && l <= st.top().first)	l = st.top().second;
		L[i] = l;
		st.push({i, L[i]});
	}
	while (!st.empty())	st.pop();
	irep(i, m, 1) {
		int r = min(m, i + h[i] - 1);
		while (!st.empty() && st.top().second <= r)	st.pop();
		if (st.size() && r >= st.top().first)	r = st.top().second;
		R[i] = r;
		st.push({i, R[i]});
	}
}
ll Dp() {
	typedef pair<ll, int> P;
	priority_queue<P, vector<P>, greater<P>> Q;
	rep(i, 1, m) {
		dp[i] = val[i] + dp[L[i] - 1];
		while (!Q.empty() && Q.top().second < i)	Q.pop();
		if (Q.size())	dp[i] = min(dp[i], Q.top().first);
		Q.push({dp[i - 1] + val[i], R[i]});
	}
	return dp[m];
}
int main() {
	ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	Read();
	Pre();
	writeln(Dp());
	return 0;
}
Codeforces 1131G(dp)的更多相关文章
- Codeforces 1142D(dp)
		题目传送 先给出设计dp的结论: dp[i][j]:以第i个位置.以rankj的数拓展出去的方案数.意会一下,我实在想不好语言-- 其中所谓rankj=真·rank%11 找到拓展的规律,转移也就顺理 ... 
- Codeforces 1107F(dp)
		怎么就没人解释一下为啥用b排序可以保证正确性呢……太菜了,理解了好久. 时间流逝价值会丢失的背包,类似题洛谷1417 本题与洛谷1417不同之处在于流逝是有截止的. 1.这个dp[j]的含义是:最后跑 ... 
- Codeforces 1107G(dp)
		1.答案要取连续的区间疯狂暗示线段树. 2.外层枚举r,内层枚举l显然过于暴力. 3.考虑内层的优化.dp[i]:以第i位为结尾的答案(长度大于1的).dp[i] = max(第一种情况,第二种情况) ... 
- codeforces 682D(DP)
		题目链接:http://codeforces.com/contest/682/problem/D 思路:dp[i][j][l][0]表示a串前i和b串前j利用a[i] == b[j]所得到的最长子序列 ... 
- codeforces 666A (DP)
		题目链接:http://codeforces.com/problemset/problem/666/A 思路:dp[i][0]表示第a[i-1]~a[i]组成的字符串是否可行,dp[i][1]表示第a ... 
- Codeforces 1144G(dp)
		据说这题是种dp的套路?然后被我国红名神仙(南大Roundgod)贪心了,不过思路上非常相近了,故而可贪吧. 设的dp[i][0]是:如果把第i个数放在上升序列里了,那么下降序列结尾的那个最大是多少: ... 
- Codeforces 1152D(dp)
		要点 寻找最多边的匹配的结论:贪心地从叶子开始找,最后答案都是奇数层下边的那条边. 设\(dp[i][j]\)表示当前长度为\(i\),平衡度为\(j\),平衡度为(数量减去)数量. 增加左右括号转移 ... 
- Three displays CodeForces - 987C (dp)
		C. Three displays time limit per test 1 second memory limit per test 256 megabytes input standard in ... 
- LightOJ 1033  Generating Palindromes(dp)
		LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ... 
随机推荐
- IC卡、ID卡、M1卡、射频卡的区别是什么
			IC卡.ID卡.M1卡.射频卡都是我们常见的一种智能卡,但是很多的顾客还是不清楚IC卡.ID卡.M1卡.射频卡的区别是什么,下面我们一起来看看吧. 所谓的IC卡就是集成电路卡,是继磁卡之后出现的又一种 ... 
- android vector pathData探究,几分钟绘制自己的vectordrawable
			之前经常看到一些酷酷的图标效果, 深入进去发现不是直接用的图片, 而是一些以Vector标签开头的xml文件, 于是就看到了如下代码: <vector xmlns:android="h ... 
- PHP执行外部命令【转】
			PHP是完全支持外部命令的,但是出于安全考虑,一般很少使用. PHP提供共了3种方法调用外部命令: (1)调用执行外部命令函数(system(),exec(),passthru(),shell_exe ... 
- 使用 WinSCP(下载) 上文件到 Linux图文教程
			问题导读: 1.如何远程链接? 2.如何上传文件? 3.如何对立面的文件进行操作? 4.什么情况下会链接失败? https://yunpan.cn/cYWtNMycjeVPv 访问密码 4f7 ... 
- eclipse导入jsp文件第一行报错
- starUML安装与破解
			安装包百度云: 链接:https://pan.baidu.com/s/1oF_DH7Xh6yun6fFUDB2H3w 密码:1z7e 破解步骤:1. 首先打开你的starUML安装目录,并找到Lice ... 
- QQ登陆功能的实现2
			QQ登陆功能的实现2 由于看到园子里有朋友说需要讲解和剖析实现的步骤,前面的QQ登陆实现只有代码,所以这篇补上 1. 分析 1). 当运行QQ.exe后会出现qq登陆界面的窗体 2). 我们用spy ... 
- 为Xen虚拟机扩容根文件系统(LVM)
			===== 为Xen虚拟机扩容根文件系统(LVM) ===== 1. 增加1个4G的映像文件 # dd if=/dev/zero of=data.img bs=4k seek=1024k count= ... 
- 简单易用"里程碑"、"时间轴"<iOS小组件>
			非常感谢,帮助我的朋友们,谢谢你们.上次我的好朋友指出了我编码上(jwTextFiled工具组件)存在一些不规范问题,这次注意提高. 呆毛地址:https://github.com/NIUXINGJI ... 
- [hdu2457]DNA repair(AC自动机+dp)
			题意:给出一些不合法的模式DNA串,给出一个原串,问最少需要修改多少个字符,使得原串中不包含非法串. 解题关键:多模式串匹配->AC自动机,求最优值->dp,注意在AC自动机上dp的套路. ... 
