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

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. http请求常出现的状态码

    服务器返回的 响应报文 中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求的结果. 状态码 类别 原因短语 1XX Informational(信息性状态码) 接收的请求正在处理 2XX ...

  2. Android 那些年,处理getActivity()为null的日子

    在日常开发中的时候,我们经常会使用ViewPager+Fragment进行视图滑动,在某些部分逻辑也许我们需要利用上下文Context(例如基本的Toast),但是由于Fragment只是衣服在Act ...

  3. sqluldr2linux64.bin的使用

    使用sqluldr2linux64.bin的前提是已经安装了Oracle数据库,sqluldr2linux64.bin和Oracle在同一台主机上使用,使用之前需要赋予可执行权限: [root@nod ...

  4. 【转载】java编程中'为了性能'一些尽量做到的地方

    1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...

  5. Java框架之spring—jdbcTemplate

    JdbcTemplate 今天我们利用 springIOC 写一个 JdbcTemplate 来实现一个表的简单的增删改查 步骤如下: 首先创建数据库,创建一个学生表 student (id,name ...

  6. java+jsp+sqlserver实现简单的增删改查操作 连接数据库代码

    1,网站系统开发需要掌握的技术 (1)网页设计语言,html语言css语言等 (2)Java语言 (3)数据库 (4)等 2,源程序代码 (1) 连接数据库代码 package com.jaovo.m ...

  7. es-for-Laravel: Composer 包安装, Laravel 最简单的方式操作 Elasticsearch

    composer 安装:composer require ethansmart/es-for-laravel github 地址:https://github.com/roancsu/es-for-l ...

  8. 紫书 例题 11-13 UVa 10735(混合图的欧拉回路)(最大流)

    这道题写了两个多小时-- 首先讲一下怎么建模 我们的目的是让所有点的出度等于入度 那么我们可以把点分为两部分, 一部分出度大于入度, 一部分入度大于出度 那么显然, 按照书里的思路,将边方向后,就相当 ...

  9. LaTeX 写算法伪码

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50054953 LaTeX写算法伪码,需 ...

  10. ajax前台传到后台乱码,显示问号的问题

    response.setContentType("text/html;charset=gbk"); response.setHeader("Cache-Control&q ...