P1280 尼克的任务
时间:2019-04-18
本文章向大家介绍P1280 尼克的任务,主要包括P1280 尼克的任务使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
-
题目
-
分析
题目要求最大的空暇时间。
DP要逆序推。
dp[ i ] 代表,从第 i 分钟,开始工作,能够得到的最大的空暇时间。
说简单点,就是
如果正着推,就是dp[ i ] 代表从1到 i 分钟的空暇时间,你不知道 i 分钟之后会发生什么,第 i 分钟要不要接活,也不知道最优结果。怎么能够进行递推呢?
所以,选择逆序。
这里,有个很好的讲解:对样例的清晰解释
8 -- 存在两个起始任务,取最大值Max( 2,3 ) -- 3
解释一下 Max(2,3) 其实是= Max(dp[8+1],dp[8+5]) 1和5是第8分钟开始的任务的持续时间。那8+1,8+5就是第8分钟开始的任务的结束时间。
-
代码
//P1280
#include<iostream>
#include<algorithm>
#include<set>
#include<cstring>
#include<queue>
#include<stack>
#include<vector>
#include<stdio.h>
using namespace std;
#define ll long long
const int maxn=1e5+5;
struct Task
{
int start;
int period;
}task[maxn];
bool mark[maxn];
vector<int>v[maxn];
int dp[maxn];
int main()
{
int n,k;
scanf("%d%d",&n,&k);
memset(mark,false,sizeof(mark));
for(int i=1;i<=k;i++)
{
scanf("%d%d",&task[i].start,&task[i].period);
mark[task[i].start]=true;
}
// for(int i=1;i<=k;i++)
// cout<<task[i].start<<" "<<task[i].period<<endl;
memset(dp,0,sizeof(dp));
dp[n+1]=0;
for(int i=n;i>=1;i--)
{
if(mark[i]==false)
dp[i]=dp[i+1]+1;
else
{
for(int j=1;j<=k;j++)
{
if(mark[task[j].start]==true && task[j].start==i)
{
// cout<<i+task[j].period<<'*'<<task[j].start<<'*'<<dp[i+task[j].period]<<endl;
dp[i]=max(dp[i],dp[i+task[j].period]);
}
}
}
// printf("dp[%d]=%d\t",i,dp[i]);
}
//cout<<endl;
cout<<dp[1]<<endl;
}
我这个内层for循环debug了很久,因为忘了判断 第k个任务的开始时间和当前时间相同。。。。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中有效地管理进程的8个命令
- Centos7 下安装python3及卸载的教程
- Linux使用VIM编辑器的方法
- Centos安装MYSQL8.X的教程
- Linux使用join -a1来合并两个文件
- ZFS是什么?使用ZFS的理由及特性介绍
- centos7.x 部署主、从DNS服务器问题
- Linux查看History记录加时间戳的小技巧
- Trash-Cli:Linux上的命令行回收站工具
- Linux中的tcpdump命令示例详解
- Linux系统文件的默认权限和特殊权限
- 如何判断一个对象是不是数组
- Linux使用NetworkManager随机生成你的MAC地址
- CentOS6.5下搭建文件共享服务Samba的教程
- ES5中的继承