洛谷P1280 && caioj 1085 动态规划入门(非常规DP9:尼克的任务)
这道题我一直按照往常的思路想
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:尼克的任务)的更多相关文章
- 洛谷P2196 && caioj 1415 动态规划6:挖地雷
没看出来动规怎么做,看到n <= 20,直接一波暴搜,过了. #include<cstdio> #include<cstring> #include<algorit ...
- caioj 1080 动态规划入门(非常规DP4:乘电梯)(dp数组更新其他量)
我一开始是这么想的 注意这道题数组下标是从大到小推,不是一般的从小到大推 f[i]表示从最高层h到第i层所花的最短时间,答案为f[1] 那么显然 f[i] = f[j] + wait(j) + (j ...
- 洛谷P1280 尼克的任务 题解 动态规划/最短路
作者:zifeiy 标签:动态规划.最短路 题目链接:https://www.luogu.org/problem/P1280 题目大意: 有k个任务分布在第1至n这n个时间点,第i个任务的于第 \(P ...
- caioj 1086 动态规划入门(非常规DP10:进攻策略)
一开始看到题目感觉很难 然后看到题解感觉这题贼简单,我好像想复杂了 就算出每一行最少的资源(完全背包+二分)然后就枚举就好了. #include<cstdio> #include<a ...
- caioj 1087 动态规划入门(非常规DP11:潜水员)(二维背包)
这道题的难点在于价值可以多. 这道题我一开始用的是前面的状态推现在的状态 实现比较麻烦,因为价值可以多,所以就设最大价值 为题目给的最大价值乘以10 #include<cstdio> #i ...
- caioj 1084 动态规划入门(非常规DP8:任务安排)(取消后效性)
这道题的难点在于,前面分组的时间会影响到后面的结果 也就是有后效性,这样是不能用dp的 所以我们要想办法取消后效性 那么,我们就可以把影响加上去,也就是当前这一组加上了s 那么就把s对后面的影响全部加 ...
- caioj 1083 动态规划入门(非常规DP7:零件分组)(LIS)
这道题题目给的顺序不是固定的 所以一开始要自己排序,按照w来排序 后来只要看l就可以了 然后求最长下降子序列即可(根据那个神奇的定理,LIS模板里有提到) #include<cstdio> ...
- caioj 1082 动态规划入门(非常规DP6:火车票)
f[i]表示从起点到第i个车站的最小费用 f[i] = min(f[j] + dist(i, j)), j < i 动规中设置起点为0,其他为正无穷 (貌似不用开long long也可以) #i ...
- caioj 1081 动态规划入门(非常规DP5:观光游览)
这道题和前面的分组的题有点像 就是枚举最后一组的长度. 然后组数可以在第一层循环也可以在第二层循环 我自己的话就统一一下在第一层循环吧 然后这道题题意我一直没理解清楚,浪费了很多时间,写复杂了 同时初 ...
随机推荐
- SpringBoot(四) Web开发 --- Thymeleaf、JSP
Spring Boot提供了spring-boot-starter-web为Web开发予以支持,spring-boot-starter-web为我们提供了嵌入的Tomcat以及Spring MVC的依 ...
- APICloud关闭Key Building Resolve
顶部菜单 --> 扩展 --> keybinding resolver --> toggle
- Java事件处理机制1
实现一个小程序,怎样通过点击不同的按钮,让面板的背景色发生相应的变化,如图: public class Demo2 extends JFrame implements ActionListener{ ...
- 利用IP安全策略关闭危险端口
默认情况下,Windows服务器有很多端口是开放的,网络病毒和黑客可以通过这些端口连上你的服务器并进行攻击. 为了让你的系统变为铜墙铁壁,应该封闭这些端口,主要有:TCP 135.139.445.59 ...
- STM8S103之中断优先级设置
STM8S的中断由中断控制器(ITC)控制.STM8所有IO都支持中断,分为PA~PE 5个组,每组IO对应一个中断服务函数(也就是每组IO只有一个向量).STM8没有专门的中断状态寄存器,所以只能通 ...
- oracle动态磁盘管理
一.ASM发展: oracle 想做硬件: 收购sum公司的小型机业务 推出一体机Exadata 1.sum服务器 2.磁盘柜(没做存储) 推出asm建库方式配合一体机(自动使用磁盘柜的盘)(抛弃ra ...
- js闭包详解-转自好友trigkit4
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的特性 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数 ...
- iOS开发——AFNetworking基于https的使用
应公司项目需求,之前的项目使用的http,新项目要求使用https,这篇博客是在AFNetworking框架基于http的基础上修改而来. 1.在开始前,先要把 .crt 文件转成 .cer 文件,然 ...
- 拓展Lucas小结
拓展Lucas是解决大组合数取模非质数(尤其是含平方因子的合数)问题的有力工具... 首先对模数质因数分解,把每个质因子单独拎出来处理答案,然后用中国剩余定理(excrt)合并 问题转化为,对于每个质 ...
- 通过HttpURLConnection 上传和下载文件(二)
HttpURLConnection文件上传 HttpURLConnection采用模拟浏览器上传的数据格式,上传给服务器 上传代码如下: package com.util; import java.i ...