九度oj 题目1499:项目安排
- 题目描述:
-
小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的。由于小明马上就要硕士毕业了,面临着买房、买车、给女友买各种包包的鸭梨,但是他的钱包却空空如也,他需要足够的money来充实钱包。万能的网友麻烦你来帮帮小明,如何在最短时间内安排自己手中的项目才能保证赚钱最多(注意:做项目的时候,项目不能并行,即两个项目之间不能有时间重叠,但是一个项目刚结束,就可以立即做另一个项目,即项目起止时间点可以重叠)。
- 输入:
-
输入可能包含多个测试样例。
对于每个测试案例,输入的第一行是一个整数n(1<=n<=10000):代表小明手中的项目个数。
接下来共有n行,每行有3个整数st、ed、val,分别表示项目的开始、截至时间和项目的报酬,相邻两数之间用空格隔开。
st、ed、value取值均在32位有符号整数(int)的范围内,输入数据保证所有数据的value总和也在int范围内。
- 输出:
-
对应每个测试案例,输出小明可以获得的最大报酬。
- 样例输入:
-
3
1 3 6
4 8 9
2 5 16
4
1 14 10
5 20 15
15 20 8
18 22 12
- 样例输出:
-
16
22 这个题用动态规划来做,开始采用的dp[],数组下标为时间,但这样做耗时很长,一个示例性的代码如下#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define MAX 10002
#define inf 99999999
struct Project
{
int start;
int end;
int value;
}; int cmp(const void *a, const void *b) {
Project at = *(Project *)a;
Project bt = *(Project *)b;
return at.end - bt.end;
} Project act[MAX];
int dp[inf]; int main(int argc, char const *argv[])
{
int n;
//freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF) {
int endMax = ;
for(int i = ; i < n; i++) {
scanf("%d %d %d",&act[i].start, &act[i].end, &act[i].value);
if(act[i].end > endMax) {
endMax = act[i].end;
}
}
//qsort(act,n,sizeof(Project),cmp); memset(dp, , sizeof(dp));
for(int i = ; i < n; i++) {
for(int j = endMax; j >= act[i].end; j--) {
int temp = dp[act[i].start] + act[i].value;
if(dp[j] < temp) {
dp[j] = temp;
}
}
}
printf("%d\n",dp[endMax]);
}
return ;
}之后下标的意义改为任务数,代码如下
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <iostream>
#define MAX 10002 using namespace std;
struct Project
{
int start;
int end;
int value;
}; int cmp(const void *a, const void *b) {
Project at = *(Project *)a;
Project bt = *(Project *)b;
return at.end - bt.end;
} Project act[MAX];
int dp[MAX]; int main(int argc, char const *argv[])
{
int n;
//freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF) {
int endMax = ;
for(int i = ; i < n; i++) {
scanf("%d %d %d",&act[i].start, &act[i].end, &act[i].value);
if(act[i].end > endMax) {
endMax = act[i].end;
}
}
qsort(act,n,sizeof(Project),cmp); memset(dp, , sizeof(dp));
dp[] = act[].value; for(int i = ; i < n; i++) {
dp[i] = dp[i-];
for(int j = i-; j >= ; j--) {
if(act[j].end <= act[i].start) {
dp[i] = max(dp[i-], dp[j] + act[i].value);
break;
}
}
dp[i] = max(dp[i], act[i].value);
}
printf("%d\n",dp[n-]);
}
return ;
}一开始代码提交错误,是因为没有43行这句话
九度oj 题目1499:项目安排的更多相关文章
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
- 九度OJ题目1003:A+B
while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...
随机推荐
- Vivado增量式编译
Vivado 中的增量设计会重新利用已有的布局布线数据来缩短运行时间,并生成可预测的结果.当设计有 95% 以上的相似度时,增量布局布线的运行时间会比一般布局布线平均缩短2倍.若相似度低于80%,则使 ...
- Mysql如何为表字段添加索引???
1.添加PRIMARY KEY(主键索引): ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引) : ALTE ...
- ThreadLocal遇到线程池时, 各线程间的数据会互相干扰, 串来串去
最近遇到一个比较隐蔽而又简单地问题,在使用ThreadLocal时发现出现多个线程中值串来串去,排查一番,确定问题为线程池的问题,线程池中的线程是会重复利用的,而ThreadLocal是用线程来做Ke ...
- myeclipse报错MA
以下问题萌新问了我很多次了,无奈写个随笔.之后问的我都在这个随笔里补充. 断电/自动关机导致的问题: Could not open the editor: the file does not exis ...
- ValueError: option names {'--alluredir'} already added 报错
运行测试用例 import pytest from WXP2P_2.test_data2.login_case import logindata_error1,logindata_error2,log ...
- 毛毛虫组【Beta】Scrum Meeting 3
第三天 日期:2019/6/25 前言 第三次会议: 时间:6月25日 地点:教10-A511 内容:此次会议主要是对项目验收做准备工作. 1.1 今日完成任务情况以及遇到的问题. 今日完成任务情况: ...
- fckeditor的实例
第一步:去官网下载,删除多余的包 删除所有”_”开头的文件和文件夹 删除FCKeditor的目录下: fckeditor.afp fckedit ...
- Avada v5.0.6 最新版本破解教程如下:
Avada v5.0.6 最新版本破解教程如下: .找到\themes\Avada\includes\avada-envato-api.php文件,注释掉如下两行代码 $response_code = ...
- 如何正确入门Windows系统下驱动开发领域?
[作者]猪头三个人网站 :http://www.x86asm.com/ [序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文 ...
- 洛谷 P2872 道路建设
https://www.luogu.org/problemnew/show/P2872 算是比较裸的并查集了,已经有路的两个点之间建一条代价为0的边,路径长度计算两点之间的距离,做并查集就好咯. #i ...