题目链接

令f[i][j][k]为第i天选择的课程为j,设置作业为a[j]+k时的最大作业量.

那么f[i][j][k]可以由哪些状态转移而来?先把课程按复杂度排序,那么可以转移来的课程是f[i-1][t][r],

其中t是<j,且复杂度a[t].c严格小于a[j].c. 这是前提条件, 其次, 对于a[t]布置的作业数量r,根据题意需要满足作业j布置的作业(a[j]+k) % r == 0,或者是 (a[j]+k) - K = r. 在这些状态转移中取最值即可.

需要留意的地方:因为bi-ai<=100,也就是说布置的作业量的状态属于[ai,bi],所以我们用差值来记录布置了多少作业,没必要朴素的真的去记录布置作业量,因为ai<=10^16..太大了.

其次,要用long long, 各个地方都别漏了. 再其次,转移的时候,需要上一个状态合法,即上一个状态的值非0.


#include<bits/stdc++.h>
using namespace std; #define ll long long
#define FOR(i,a,b) for(int i=(a);i<=(b);++i) ll N, M, K, cas;
struct node{ll l, r, c;} a[55];
bool cmp(node a, node b) {return a.c < b.c;}
bool ok(ll v, node nd) {return nd.l <= v && v <= nd.r;}
ll f[55][55][105], ans; int main () {
while (~scanf("%lld%lld%lld", &N, &M, &K)) {
ans = 0;
memset(f, 0, sizeof f);
FOR(i, 1, M) scanf("%lld%lld%lld", &a[i].l, &a[i].r, &a[i].c);
sort(a + 1, a + 1 + M, cmp);
FOR(i, 1, M)
FOR(j, 0, a[i].r - a[i].l)
f[1][i][j] = a[i].l + j; FOR(i, 2, N) {
FOR(j, 2, M) {
FOR(t, 1, j - 1) {
if (a[j].c <= a[t].c) continue;
FOR(k, 0, a[j].r - a[j].l) {
ll pre = a[j].l + k - K;
ll &cur = f[i][j][k];
if (ok(pre, a[t]) && f[i - 1][t][pre - a[t].l])
cur = max(cur, f[i - 1][t][pre - a[t].l] + a[j].l + k);
pre = (a[j].l + k) / K;
if ((a[j].l + k) % K == 0 && ok(pre, a[t])
&& f[i - 1][t][pre - a[t].l])
cur = max(cur, f[i - 1][t][pre - a[t].l]
+ a[j].l + k);
}
}
}
}
FOR(i, 1, M)
FOR(j, 0, a[i].r - a[i].l)
ans = max(ans, f[N][i][j]);
if (ans) printf("YES\n%lld\n", ans);
else puts("NO");
}
return 0;
}

51nod 1636 教育改革的更多相关文章

  1. 51nod 1636 教育改革 | DP

    51nod 1636 教育改革 | DP 题面 最近A学校正在实施教育改革. 一个学年由n天组成.A学校有m门课程,每天学生必须学习一门课,一门课程必须在一天内学习完.在学习完第i门课程后,学生们会收 ...

  2. 51 Nod 1636 教育改革(dp)

    1636 教育改革  题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 最近A学校正在实施教育改革. 一个学年由n天 ...

  3. 51nod 1636

    1636 教育改革 我看过题解了还下了数据,表示很惭愧不想说什么,但还是说两句吧 sol: 因为差值很小只有100,所以对数组下标存的是(选择的数值和左端点的差值) f[i][j][k]即为第i天选了 ...

  4. 教育改革——国家认证 “网红” 编程语言 Python

     特大消息!!!  不止是上海计算机二级考试 ,全国计算机考试等级考试也有要求 如果你正打算考计算机等级,那你需要学习以下知识 要求学习的知识太多了,我就不一一在这里展示了! 一.考试改革的目标 据悉 ...

  5. 51nod-1636-dp

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1636 1636 教育改革 题目来源: CodeForces 基准时间限制 ...

  6. 好未来谢华亮:AI 在教育行业中的应用

    11 月 23 日,在以「AI 产业技术的渗透与融合」为主题的 NIUDAY 北京站中,好未来 SEG 智慧教育事业部技术总监谢华亮为大家带来了关于「AI 在教育行业中的应用」的分享. 本文是对分享内 ...

  7. BZOJ 1036 && 树链剖分

    还是太弱啊..各种数据结构只听过名字却没有一点概念..树链剖分也在这个范畴..今天来进一步深化一下教育改革推进全民素质提高. 性质 忘了在哪里看到的一篇blog有一句话讲得非常好,树链剖分不是一种数据 ...

  8. 加州wonders教材扫盲

    加州语文教材主要包含以下内容: 1.主教材Reading/Writing Workshop(读写研讨) 2.拓展教材Literature Anthology(文学选集) 3.延伸阅读材料Leveled ...

  9. 龙芯将两款 CPU 核开源,这意味着什么?

    10月21日,教育部计算机类教学指导委员会.中国计算机学会教育专委会将2016 CNCC期间在山西太原举办“面向计算机系统能力培养的龙芯CPU高校开源计划”活动,在活动中,龙芯中科宣布将GS132和G ...

随机推荐

  1. es6学习笔记11--Proxy和Reflect

    Proxy概述 Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. Proxy可以理解成,在目标对象之前 ...

  2. flink-vs.-spark

    这段时间,开始学习Flink,并了解了Spark与Flink的区别,开始觉得Flink大有取代Spark的趋势啊,实时流始终目前是Spark的瓶颈呀,下面来一张对比图: 图片来源于:https://j ...

  3. C# ArrayList的使用方法小总结

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...

  4. RESTful API入门

      RESTful是一种设计风格,并不是一种标准. 简短的去概括的话,就是:1.URL 定位资源 资源,就是数据.比如newsfeed,friends,order等 2.用 HTTP 动词描述操作. ...

  5. js 筛选数据

    <input type="text" id="filterName"> <div class="scope fr"> ...

  6. LDA算法学习(Matlab实现)

    LDA算法 对于两类问题的LDA(Matlab实现) function [ W] = FisherLDA(w1,w2) %W最大特征值对应的特征向量 %w1 第一类样本 %w2 第二类样本 %第一步: ...

  7. TCP Socket Http关系

    理解Tomcat内部处理网络数据的机制同时需要了解相关的一些术语,这样我们在阅读源码的时候能更加清楚的理解Connector下使用到的Socket通信原理. TCP/IP: 数据在网络传输是基于TCP ...

  8. SpringBoot启动加载类ApplicationRunner

    SpringBoot启动加载类ApplicationRunner 有时希望项目在启动的时候加载一些系统参数,就要用到ApplicationRunner ApplicationRunner是一个接口,我 ...

  9. HDU3081(KB11-N 二分答案+最大流)

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  10. linux 新建用户和权限分配

    1.创建新用户:testuser 命令:#useradd 选项 用户名 选项: -c comment 指定一段注释性描述. -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主 ...