传送门

Codeforces1107G一起食用

思路

  • 想到要用dp……然后常规地设dp[i]为推倒前i个牌的最小花费
  • 有两种情况:一是当前这个推,二是不推而被别人推。对于第一种,需要找到这个左推(因为扫到这里他是最后一个所以不用右推)的最远处,于是有了预处理每一位的最左边;对于第二种,巨弱鲁莽地优先队列搞了,看大佬代码直接单调栈快了我好几倍,菜不成声。
  1. const int maxn = 25e4 + 5, maxm = 1e7 + 5;
  2. int n, m, k[maxn], q, tot, h[maxm], L[maxm], R[maxm];
  3. ll val[maxm], dp[maxm];
  4. vector<int> a[maxn];
  5. vector<ll> c[maxn];
  6. void Read() {
  7. read(n), read(m);
  8. rep(i, 1, n) {
  9. read(k[i]);
  10. rep(j, 1, k[i]) {
  11. int aa;
  12. read(aa);
  13. a[i].push_back(aa);
  14. }
  15. rep(j, 1, k[i]) {
  16. ll cc;
  17. read(cc);
  18. c[i].push_back(cc);
  19. }
  20. }
  21. for (read(q); q; q--) {
  22. int id, mul;
  23. read(id), read(mul);
  24. rep(i, 1, k[id]) {
  25. h[tot + i] = a[id][i - 1];
  26. val[tot + i] = c[id][i - 1] * mul;
  27. }
  28. tot += k[id];
  29. }
  30. }
  31. void Pre() {
  32. stack<pii> st;
  33. rep(i, 1, m) {
  34. int l = max(1, i - h[i] + 1);
  35. while (!st.empty() && st.top().second >= l) st.pop();
  36. if (st.size() && l <= st.top().first) l = st.top().second;
  37. L[i] = l;
  38. st.push({i, L[i]});
  39. }
  40. while (!st.empty()) st.pop();
  41. irep(i, m, 1) {
  42. int r = min(m, i + h[i] - 1);
  43. while (!st.empty() && st.top().second <= r) st.pop();
  44. if (st.size() && r >= st.top().first) r = st.top().second;
  45. R[i] = r;
  46. st.push({i, R[i]});
  47. }
  48. }
  49. ll Dp() {
  50. typedef pair<ll, int> P;
  51. priority_queue<P, vector<P>, greater<P>> Q;
  52. rep(i, 1, m) {
  53. dp[i] = val[i] + dp[L[i] - 1];
  54. while (!Q.empty() && Q.top().second < i) Q.pop();
  55. if (Q.size()) dp[i] = min(dp[i], Q.top().first);
  56. Q.push({dp[i - 1] + val[i], R[i]});
  57. }
  58. return dp[m];
  59. }
  60. int main() {
  61. ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  62. Read();
  63. Pre();
  64. writeln(Dp());
  65. return 0;
  66. }

Codeforces 1131G(dp)的更多相关文章

  1. Codeforces 1142D(dp)

    题目传送 先给出设计dp的结论: dp[i][j]:以第i个位置.以rankj的数拓展出去的方案数.意会一下,我实在想不好语言-- 其中所谓rankj=真·rank%11 找到拓展的规律,转移也就顺理 ...

  2. Codeforces 1107F(dp)

    怎么就没人解释一下为啥用b排序可以保证正确性呢……太菜了,理解了好久. 时间流逝价值会丢失的背包,类似题洛谷1417 本题与洛谷1417不同之处在于流逝是有截止的. 1.这个dp[j]的含义是:最后跑 ...

  3. Codeforces 1107G(dp)

    1.答案要取连续的区间疯狂暗示线段树. 2.外层枚举r,内层枚举l显然过于暴力. 3.考虑内层的优化.dp[i]:以第i位为结尾的答案(长度大于1的).dp[i] = max(第一种情况,第二种情况) ...

  4. codeforces 682D(DP)

    题目链接:http://codeforces.com/contest/682/problem/D 思路:dp[i][j][l][0]表示a串前i和b串前j利用a[i] == b[j]所得到的最长子序列 ...

  5. codeforces 666A (DP)

    题目链接:http://codeforces.com/problemset/problem/666/A 思路:dp[i][0]表示第a[i-1]~a[i]组成的字符串是否可行,dp[i][1]表示第a ...

  6. Codeforces 1144G(dp)

    据说这题是种dp的套路?然后被我国红名神仙(南大Roundgod)贪心了,不过思路上非常相近了,故而可贪吧. 设的dp[i][0]是:如果把第i个数放在上升序列里了,那么下降序列结尾的那个最大是多少: ...

  7. Codeforces 1152D(dp)

    要点 寻找最多边的匹配的结论:贪心地从叶子开始找,最后答案都是奇数层下边的那条边. 设\(dp[i][j]\)表示当前长度为\(i\),平衡度为\(j\),平衡度为(数量减去)数量. 增加左右括号转移 ...

  8. Three displays CodeForces - 987C (dp)

    C. Three displays time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

随机推荐

  1. Codeforces Round #373 (Div. 2) C. Efim and Strange Grade —— 贪心 + 字符串处理

    题目链接:http://codeforces.com/problemset/problem/719/C C. Efim and Strange Grade time limit per test 1 ...

  2. 闪动的Label控件

    带闪动效果带控件,目前只有Label,以后会逐步增加,如果有好看带效果也欢迎您带加入. 如果可能,请在github中star,您的支持是我继续完善的动力,非常感谢. 测试环境:Xcode 5.0,iO ...

  3. BestCoder7 1001 Little Pony and Permutation(hdu 4985) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4985 题目意思:有 n 个数,对于第 i 个数给出 σ(i) 的值.求出互不相交的循环的个数,并输出每 ...

  4. Java 高阶 —— try/catch

    // try catch 在 for 循环外 try { for(int i = 0; i < max; i++) { String myString = ...; float myNum = ...

  5. INSTALL_FAILED_UID_CHANGED

    ADT试图安装console显示上面的提示.网上查的办法: 1. 删除/data/app/(filename) 文件夹下的apk包 2. 删除/system/app/(filename) 文件夹下的a ...

  6. TX2 刷机过程

    1.拿到板子,上电 (1)输入 ls (2)进入NVIDIA-INSTALLER/ (3)再sudo ./installer.sh 账户和密码都是:nvidia (4)sudo reboot 参考博客 ...

  7. 用C++发邮件

    近段时间,实验室电脑的IP频繁地改变,搞得想用远程偷下懒都不行.这时想到的解决方法有:静态IP,动态域名,自己解决.静态IP虽然可以自己指定,但一关机后,与对方冲突就完了,作罢.免费的动态域名又要手机 ...

  8. tyvj1940创世纪——贪心(基环树)

    题目:http://www.joyoi.cn/problem/tyvj-1940 基环树的样子,看了书上的讲解,准备写树上DP,然后挂了: #include<iostream> #incl ...

  9. 4.js屏蔽浏览器鼠标右键菜单

    document.oncontextmenu = function(){return false;} 参考链接:js 屏蔽浏览器事件汇总

  10. windows安装PHP5.4+Apache2.4+Mysql5.5

    windows安装PHP5.4+Apache2.4+Mysql5.5 作者:星之宇 ┊ 时间:2012-10-18 14:27 ┊ 分类: 网站技术 ┊ 阅读:1232 ┊ 评论:16 最近听说PHP ...