最优时间表
sche.pas/cpp)

【问题描述】

一台精密仪器的工作时间为 n 个时间单位。与仪器工作时间同步进行若干仪器维修程序。一旦启动维修程序,仪器必须进入维修程序。如果只有一个维修程序启动,则必须进入该维修程序。如果在同一时刻有多个维修程序,可任选进入其中的一个维修程序。维修程序必须从头开始,不能从中间插入。一个维修程序从第s个时间单位开始,持续t个时间单位,则该维修程序在第s+t-1个时间单位结束。为了提高仪器使用率,希望安排尽可能少的维修时间。

编程任务:对于给定的维修程序时间表,编程计算最优时间表。

 

【输入数据】

第 1 行有2 个正整数n和 k(1≤n,k≤9999)。n表示仪器的工作时间单位;k是维修程序数。接下来的k行中,每行有2 个表示维修程序的整数s和 t,该维修程序从第s个时间单位开始,持续t个时间单位。

 

【输出数据】

最少维修时间。

 

【样例输入】sche.in

15 6

1 2

1 6

4 11

8 5

8 1

11 5

 

【样例输出】sche.out

11

这一题用搜索应该能做,不过效率很低,当时没做出来

用动规的话可以换一种思维求最大工作时间

正序枚举的话就会面临题目中所说的只有一个必须取,多个随便取一个,很不好判断,所以可以逆序枚举

用f[i]表示 i~n 的最大工作时间,如果没有以 i 为开头的维修工作,那么f[i]=f[i+1]+1(这里的1是由于没有维修任务,就尽可能的多工作,所以加一个时间单位)
如果有,就从里面选一个最大值f[i]=max{f[i+tj]}

最后输出答案用n减去f[1]即可

C++ Code

/*
C++ Code
http://oijzh.cnblogs.com
*/
#include<cstdio>
#include<string>
#include<list>
using namespace std;
#define MAXN 10010
#define oo 999999999int n,k,f[MAXN];
struct tnode{int t;tnode* next;};
tnode* first[MAXN];void insert(int s,int t)
{tnode*aa=new tnode;aa->t=t;aa->next=first[s];first[s]=aa;
}int main()
{freopen("sche.in","r",stdin);freopen("sche.out","w",stdout);scanf("%d%d",&n,&k);int i,j,s,t;for(i=1;i<=k;i++){scanf("%d%d",&s,&t);insert(s,t);}for(i=n;i>=1;i--){if(!first[i]){f[i]=f[i+1]+1;}tnode* node=first[i];while(node){f[i]=max(f[i],f[i+node->t]);node=node -> next;}}printf("%d",n-f[1]);return 0;
}

还有一种方法就是直接推最短维修时间,不过要赋初值,其他改动的就是f[i]取min,最后输出f[1]

#include<cstdio>
#include<string>
#include<list>
using namespace std;
#define MAXN 10010
#define oo 999999999int n,k,f[MAXN];
struct tnode{int t;tnode* next;};
tnode* first[MAXN];void insert(int s,int t)
{tnode*aa=new tnode;aa->t=t;aa->next=first[s];first[s]=aa;
}int main()
{freopen("sche.in","r",stdin);freopen("sche.out","w",stdout);scanf("%d%d",&n,&k);int i,j,s,t;for(i=1;i<=k;i++){scanf("%d%d",&s,&t);insert(s,t);}memset(f,63,sizeof(f));f[n+1]=n;for(i=n;i>=1;i--){if(!first[i]){f[i]=f[i+1]-1;}tnode* node=first[i];while(node){f[i]=min(f[i],f[i+node->t]);node=node -> next;}}printf("%d",f[1]);return 0;
}

转载于:https://www.cnblogs.com/oijzh/archive/2012/09/19/2694361.html

【动规递推】最优时间表 sche相关推荐

  1. 【动规递推】聪明伶俐的香穗子

    聪明伶俐的香穗子 香穗子遇到难题了. 题目是这样的,一个序列上有n个整数,现在你要取m个,且这m个数的任意两个不能相隔的太近,否则这样会太丑,现在问你最大能得到多大的和 输入: 第一行三个数n,m,k ...

  2. 递推最小二乘估计Matlab仿真

    递推最小二乘估计Matlab仿真 递推最小二乘估计理论 仿真背景 Matlab程序 仿真动图 递推最小二乘估计理论 递推最小二乘是卡尔曼滤波的重要基础,关于最小二乘理论可以参见之前的文章( 最小二乘估 ...

  3. 洛谷 P1073 最优贸易 (分层图状态转移+SPFA,求最长路径;另附某dalao的超短代码:暴力+动规)

    题目链接1 题目链接2 另附某dalao的超短代码:暴力+动规 P1073 最优贸易 题目描述 C国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市. 任意两个城市之间最多只有 ...

  4. leetcode 121. 买卖股票的最佳时机 (贪心 + 动规 + 双指针

    贪心的思路: 得到最小值,再挨个用数组中的值减去最小值,最终值取一个最大的 class Solution { public:int maxProfit(vector<int>& p ...

  5. 硬币找零——背包问题,以及循环、递归、动规共通性

    在这个题目的基础上,我了解了一下这几个"编程写法",并对循环.递归.dp有了新的想法.从原理上,这几个想法都是大事化小.小事化了.只不过方向不同罢了. 根据The Algorith ...

  6. POJ 1661 Help Jimmy(递推DP)

    思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...

  7. 关于数位动规(入门到进阶,难度中档)

    数位动规,就是对于数位进行动规(日常一句废话···) 刚好今天听数位dp,就总结一下最近写的题吧.郭神说要学懂数位dp,还是要搞懂它内部是怎么工作的.比如一个有大小的数,我们在这里剥夺它作为一个整数的 ...

  8. 递推算法与递推套路(手撕算法篇)

    联系我们:有道技术团队助手:ydtech01 / 邮箱:[ydtech@rd.netease.com] 之前学习基础知识的时候也说了,递推和动态规划有这暧昧不清的关系,可以说,动态规划就是多了一个决策 ...

  9. matlab如何仿真递推型dft算法,递推dft算法

    0.7 0.8 0.9 1 0.6 0.7 0.8 0.9 1 伯格(Burg)递推算法 L-D算法缺点: 在计算相关函数估计时,对N个观测数据以 外的数据作零的假设,故谱估计误差较...... 第3 ...

最新文章

  1. Linux下的内存对齐函数
  2. 程序员期末试卷_第三部分复习提纲.doc下载
  3. js日期格式化精髓总结
  4. sql with as 用法
  5. zookeeper+kafka+logstash+elasticsearc+kibana
  6. c语言合法自定义标识符_计算机二级C语言干货来了
  7. Redis分布式锁的实现原理看这篇就够了~
  8. preg使用。还是一样,只是个人记录,不放博客园首页
  9. java线性表合并_合并两个线性表
  10. 三维点云学习(5)3-Deep learning for Point Cloud-PointNet++
  11. python求三个整数最大值_python 练习题:定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值。...
  12. 还记得爆火的图解算法吗?现在图解机器学习算法书来了!送书10本!
  13. 嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng
  14. 推荐两款外文检查语法错误和润色的软件
  15. jitter概念理解
  16. lol网通服务器位置,《LOL》转区系统官网网址 转区系统在哪里怎么转区
  17. Linux设备树led,linux设备树下LED灯控制
  18. 公民SF证号码的构成
  19. Qt 2D游戏引擎QtGameEngine使用入门案例
  20. mysql数据库导入数据的几种方式

热门文章

  1. 时间序列及其R代码实现
  2. H5canvas基础
  3. Maix Bit(K210) 裸机开发教程(三) 定时的使用
  4. ztree的使用demo
  5. Python数据分析案例20——我国家庭资产影响因素分析
  6. 截取文本内容,包括中英文,多余则显示省略号
  7. 基于python/django的图书管理系统
  8. Mindmanager故障问题一 Visual c ++ runtime library error R6025错误
  9. 【PTA】7-2 国王的奖励——分数取模、分治思想、快速幂、int64的乘法模运算【C/C++】
  10. 腾讯研发动画组件,以后动画制作用PAG