这道题我一直按照往常的思路想

f[i]为前i个任务的最大空暇时间

然后想不出来怎么做……

后来看了题解

发现这里设的状态是时间,不是任务

自己思维还是太局限了,题做得太少。

很多网上题解都反着做,那么麻烦干嘛

设f[i]为前i时间内的最大空暇时间。

这里是更新后来的状态,和以前不一样。

如果i为某个任务的开始时间,则

f[i+t-1] = max(f[i+t-1], f[i])

也就是继承过去,取max

如果不是的话

f[i] = max(f[i], f[i-1] + 1)

加上获得的空暇时间

最后输出f[time],time为总时间

#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 11234;
int f[MAXN], time, n;
struct node
{
int l, r;
bool operator < (const node& rhs) const
{
return l < rhs.l || (l == rhs.l && r < rhs.r);
}
}a[MAXN]; int main()
{
scanf("%d%d", &time, &n);
REP(i, 1, n + 1) scanf("%d%d", &a[i].l, &a[i].r);
sort(a + 1, a + n + 1); memset(f, -63, sizeof(f));
f[0] = 0;
int p = 1;
REP(i, 1, time + 1)
{
if(a[p].l == i)
{
while(a[p].l == i)
f[i + a[p].r - 1] = max(f[i + a[p].r - 1], f[i-1]), p++;
}
else f[i] = max(f[i], f[i-1] + 1);
}
printf("%d\n", f[time]); return 0;
}

后来做到洛谷P1280,竟然做不出来了,看来对题解还是没有深刻的理解

(1)初始化问题。本来以为全部都是0无所谓的,然后就WA。

因为求最大,所以初始化为最小,同时f[0] = 0

(2)这里推时间是从f[i-1]推,不是f[i]

然后我发现把这个f数组输出来乱七八糟的。

但是答案是对的

有点迷(因为下标是时间??)

最后,这11天过来我的代码风格还是有少许改变的

#include<cstdio>
#include<algorithm>
#include<cstring>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std; const int MAXN = 112345;
int f[MAXN], n, k;
struct node
{
int l, r;
void read() { scanf("%d%d", &l, &r); r = l + r - 1; }
bool operator < (const node& rhs) const
{
return l < rhs.l || (l == rhs.l && r < rhs.r);
}
}a[MAXN]; int main()
{
scanf("%d%d", &n, &k);
REP(i, 0, k) a[i].read();
sort(a, a + k); memset(f, -63, sizeof(f));
f[0] = 0;
int p = 0;
_for(i, 1, n)
{
if(a[p].l == i)
{
while(a[p].l == i)
f[a[p].r] = max(f[a[p].r], f[i-1]), p++;
}
else f[i] = max(f[i], f[i-1] + 1);
}
printf("%d\n", f[n]); return 0;
}

洛谷P1280 && caioj 1085 动态规划入门(非常规DP9:尼克的任务)的更多相关文章

  1. 洛谷P2196 && caioj 1415 动态规划6:挖地雷

    没看出来动规怎么做,看到n <= 20,直接一波暴搜,过了. #include<cstdio> #include<cstring> #include<algorit ...

  2. caioj 1080 动态规划入门(非常规DP4:乘电梯)(dp数组更新其他量)

    我一开始是这么想的 注意这道题数组下标是从大到小推,不是一般的从小到大推 f[i]表示从最高层h到第i层所花的最短时间,答案为f[1] 那么显然 f[i] = f[j] + wait(j) + (j ...

  3. 洛谷P1280 尼克的任务 题解 动态规划/最短路

    作者:zifeiy 标签:动态规划.最短路 题目链接:https://www.luogu.org/problem/P1280 题目大意: 有k个任务分布在第1至n这n个时间点,第i个任务的于第 \(P ...

  4. caioj 1086 动态规划入门(非常规DP10:进攻策略)

    一开始看到题目感觉很难 然后看到题解感觉这题贼简单,我好像想复杂了 就算出每一行最少的资源(完全背包+二分)然后就枚举就好了. #include<cstdio> #include<a ...

  5. caioj 1087 动态规划入门(非常规DP11:潜水员)(二维背包)

    这道题的难点在于价值可以多. 这道题我一开始用的是前面的状态推现在的状态 实现比较麻烦,因为价值可以多,所以就设最大价值 为题目给的最大价值乘以10 #include<cstdio> #i ...

  6. caioj 1084 动态规划入门(非常规DP8:任务安排)(取消后效性)

    这道题的难点在于,前面分组的时间会影响到后面的结果 也就是有后效性,这样是不能用dp的 所以我们要想办法取消后效性 那么,我们就可以把影响加上去,也就是当前这一组加上了s 那么就把s对后面的影响全部加 ...

  7. caioj 1083 动态规划入门(非常规DP7:零件分组)(LIS)

    这道题题目给的顺序不是固定的 所以一开始要自己排序,按照w来排序 后来只要看l就可以了 然后求最长下降子序列即可(根据那个神奇的定理,LIS模板里有提到) #include<cstdio> ...

  8. caioj 1082 动态规划入门(非常规DP6:火车票)

    f[i]表示从起点到第i个车站的最小费用 f[i] = min(f[j] + dist(i, j)), j < i 动规中设置起点为0,其他为正无穷 (貌似不用开long long也可以) #i ...

  9. caioj 1081 动态规划入门(非常规DP5:观光游览)

    这道题和前面的分组的题有点像 就是枚举最后一组的长度. 然后组数可以在第一层循环也可以在第二层循环 我自己的话就统一一下在第一层循环吧 然后这道题题意我一直没理解清楚,浪费了很多时间,写复杂了 同时初 ...

随机推荐

  1. 【算法】prim算法(最小生成树)(与Dijkstra算法的比较)

    最小生成树: 生成树的定义:给定一个无向图,如果它的某个子图中任意两个顶点都互相连通并且是一棵树,那么这棵树就叫做生成树.(Spanning Tree) 最小生成树的定义:在生成树的基础上,如果边上有 ...

  2. ActiveMQ学习笔记(7)----ActiveMQ支持的传输协议

    1. 连接到ActiveMQ Connector: Active提供的,用来实现连接通讯的功能,包括:client-to-broker,broker-to-broker.ActiveMQ允许客户端使用 ...

  3. OSI概述问答

    1.    网络中体系结构的七层.四层.五层是怎么回事? OSI(Open System Interconnection)开放系统互连参考模型的七层协议体系结构:概念清楚,理论比较完整,但既复杂又不用 ...

  4. ORACLE查询优化之is null和is not null优化

    最近工作的时候遇到了比较大的数据查询,自己的sql在数据量小的时候没问题,在数据量达到300W的时候特别慢,只有自己优化sql了,以前没有优化过,所以记录下来自己的优化过程,本次是关于is null和 ...

  5. css 禁止文本被选中复制代码

    css 禁止文本被选中复制代码: .cus-text{ -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none ...

  6. [arc086e]snuke line

    题意: 有n个区间,询问对于$1\leq i\leq m$的每个i,有多少个区间至少包含一个i的倍数? $1\leq N\leq 3\times 10^5$ $1\leq M\leq 10^5$ 题解 ...

  7. mven系列问题

    1.前言 Maven,发音是[`meivin],"专家"的意思.它是一个很好的项目管理工具,很早就进入了我的必备工具行列,但是这次为了把 project1项目完全迁移并应用mave ...

  8. SpringBoot实战(一)HelloWorld

    一:环境准备: JDK:1.8版本 Maven:3.5版本(如果觉得下载速度慢,可以切换为阿里镜向地址) Intellij:2018.2.1版本 二:实际操作: 1.在Intellij中创建一个新的S ...

  9. hdu 1518 Square 深搜,,,,花样剪枝啊!!!

    Square Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  10. Redit集群搭建-Sentinel模式搭建

    Redit集群搭建 学习了: Windows:http://blog.csdn.net/mrxiagc/article/details/52799081 Linux:https://www.cnblo ...