最优时间表
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. 7.Nginx_Keepalived高可用配置
  2. Android PC投屏简单尝试—最终章1
  3. JEECG 3.6.5版本发布,企业级JAVA快速开发平台
  4. mysql注解实体类_jpa实体类生成mysql表及字段注解
  5. 分库分表解决方案之MyCat
  6. 会议管理SaaS平台Social Tables融资1300万美元
  7. 快速排序查询第k个数
  8. python输出结果换行_如果Python中有很多换行,可以选择使用...表示多行内容...
  9. vue返回上一页面时回到原先滚动的位置
  10. python画散点图 不同属性赋予不同颜色
  11. 谈谈“天轰穿”老师对VS2005的视频讲座
  12. python实战笔记之(4):刷博客浏览量
  13. android 获取经纬度的三种方法,Android获取经纬度
  14. 电脑连接HDMI显示器后没声音
  15. DOP反映的是测量误差与定位误差之间的传递关系。
  16. 解决运行uiautomatorviewer时报错-Djava.ext.dirs=/usr/local/android-sdk-
  17. MySQL顺序读写和随机读写磁盘_随机读写与顺序读写的深入理解
  18. 想成为企业疯抢的新型数通人才?华为Datacom认证喊你来学习啦
  19. 用CSS3制作一个风车
  20. 加州大学欧文分校计算机排名,加州大学欧文分校计算机工程硕士排名第30(2020年TFE Times排名)...

热门文章

  1. 钉钉、企业微信和飞书向“钱”看
  2. DRM系列(13)之writeback_job介绍
  3. 一些新的 UI 图免费下载
  4. (9) IFC中的聚合关系(IfcRelAggregates) (Industry Foundation Class)
  5. Object.freeze()--将对象冻结--在const中的应用
  6. LATEX编辑与应用《炉温曲线的机理建模与优化设计》
  7. 读《月亮和六便士》感触
  8. 3dsmax 里”编辑网格“与”编辑多边形“的区别
  9. 编写程序,计算两个二维平面向量的和向量。
  10. 【考研政治】2021肖八整理(史纲部分)