dp - 活动选择问题
算法目前存在问题,待解决。。
活动选择问题是一类任务调度的问题,目标是选出一个最大的互相兼容的活动集合。例如:学校教室的安排问题,几个班级需要在同一天使用同一间教室,但其中一些班级的使用时间产生冲突,一些班级的时间是兼容的,我们需要找出最大的相互兼容的这样一个集合。实际上,运用‘贪心’的思想,可以准确又效率的找出这样一个集合,但为了练习一下动态规划,这篇使用了dp的做法。
活动时间表:
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
si | 1 | 3 | 0 | 5 | 3 | 5 | 6 | 8 | 8 | 2 | 12 | 17 |
fi | 4 | 5 | 6 | 7 | 9 | 9 | 10 | 11 | 12 | 14 | 16 | 21 |
最优子结构以及递归公式书中给出了详细的分析过程,但课后练习题要求使用动态规划用代码实现算法,于是给出我的代码:
#include "stdafx.h"
#include <iostream>
#include <minmax.h>
#include <vector> class DP {
public:
int ActivitySelectProblem(std::vector<int> & s, std::vector<int> & f)
{
std::vector<std::vector<int> > dp(s.size() - 1, std::vector<int>(s.size() - 1));
int count = 0; for (int l = 1; l < s.size(); l++)
for (int i = 0; i < s.size() - l; i++)
{
int j = i + l - 1;
dp[i][j] = 0;
for (int k = i; k < j; k++)
{
if (f[i] <= s[k + 1])
dp[i][j] = max(dp[i][j], dp[i][k] + dp[k][j] + 1);
count = max(count, dp[i][j] - 1);
}
} return count;
}
}; int main()
{
std::vector<int> s{ 1,3,0,5,3,5,6,8,8,2,12,17 };
std::vector<int> f{ 4,5,6,7,9,9,10,11,12,14,16,21 }; std::cout << DP().ActivitySelectProblem(s, f) << std::endl; getchar();
return 0;
}
有递归公式,那么算法的实现是很简单的。为了简单,所以我使用返回集合的长度的方法,但实际上这是非常不显然的,看不出是哪些班级相互兼容,但我也没想到好办法实现保存合格的班级的下标,然后返回集合。我再思考思考。。。时间复杂度O(n^3)。
dp - 活动选择问题的更多相关文章
- 基于visual Studio2013解决算法导论之049活动选择问题
题目 活动选择问题 解决代码及点评 // 活动选择问题.cpp : 定义控制台应用程序的入口点. // #include<iostream> #define N 100 using ...
- (Java实现) 活动选择
活动选择的类似问题都可以这么写 import java.util.ArrayList; public class huodongxuanze { /** * //算法导论中活动选择问题动态规划求解 * ...
- D - 活动选择
Description 学校的大学生艺术中心周日将面向全校各个学院的学生社团开放,但活动中心同时只能供一个社团活动使用,并且每一个社团活动开始后都不能中断.现在各个社团都提交了他们使用该中心的活动计划 ...
- SDUTOJ 1298 活动选择
#include<iostream> #include<memory.h> using namespace std; int a[105],b[105],c[105],d[10 ...
- 吉哥系列故事――临时工计划(dp)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descr ...
- URAL 1203 Scientific Conference(贪心 || DP)
Scientific Conference 之前一直在刷计算几何,邀请赛连计算几何的毛都买见着,暑假这一段时间就做多校.补多校的题目.刷一下一直薄弱的DP.多校假设有计算几何一定要干掉-.- 题意:给 ...
- 从CR线下活动学到的:如何组织一个小的线下活动
作者:朱克锋 邮箱:zhukefeng@iboxpay.com 转载请注明出处:http://blog.csdn.net/linux_zkf 周末在腾讯组织了GR,活动达到了预期的收获,从这次活动我主 ...
- 一道简单树形dp
题意:给定一棵树,从中选出一些节点,使得不成父子关系的节点对数最多.问这个最大值是多少. 思路:首先既然是给定一颗树,先要选择合适的数据结构,来保存这颗树.由于这颗树只关心根节点在哪里,所以只需要用一 ...
- 树形$dp$学习笔记
今天学习了树形\(dp\),一开始浏览各大\(blog\),发现都\(TM\)是题,连个入门的\(blog\)都没有,体验极差.所以我立志要写一篇可以让初学树形\(dp\)的童鞋快速入门. 树形\(d ...
随机推荐
- vnpy源码阅读学习(5):关于MainEngine的代码阅读
关于MainEngine的代码阅读 在入口文件中,我们看到了除了窗体界面的产生,还有关于MainEngine和EventEngin部分.今天来学习下MainEngine的代码. 首先在run代码中,我 ...
- 中国大学MOOC 邮箱验证的问题
在使用 中国大学 MOOC 过程中,在PC端修改个人资料时,其中有项“常用邮箱”,于是写了QQ邮箱,结果发现一直无法验证,连邮件都无法收到. 经过多番尝试,重新使用邮箱注册的方式注册账号,然后注册成功 ...
- AppBoxFuture: Sql存储的ORM查询示例
上篇介绍集成第三方Sql数据库时未实现如导航属性.子查询等功能,经过大半个月的努力作者初步实现了这些功能,基本上能满足80%-90%查询需求,特别复杂的查询可以用原生sql来处理,下面分别示例介绍 ...
- blg_统考,打印准考证 网页代码!
<html xmlns="http://www.w3.org/1999/xhtml"><head> <title>打印准考证</title ...
- Django框架之ORM的相关操作(一)
一.一般操作 from django.db import models import datetime # Create your models here. class Author(models.M ...
- 多进程pipe
pipe模块可以实现进程之间数据传递 栗子1:3个进程,一个主进程,2个子进程,三个管道,三个进程通过3个管道连接,主进程发一个信息,通过2个子进程转发,最后回到主进程输出 import multip ...
- Spring IoC(三)bean属性、方法注释
1.环境配置 使用注解开发jdk1.5.Spring2.5支持,在xml中添加context相关的是四个配置; <beans default-lazy-init="true" ...
- NIO的理解
一.缓冲区(Buffer):在java NIO中负责数据的存取,实际上就是数组,用于存储不用数据类型的数据,根据数据类型不同(boolean除外),提供了相应类型的缓冲区(ByteBuffer,Cha ...
- C语言与汇编的嵌入式编程:求100以内素数
写汇编之前,需要搞清楚C语言代码的写法,这里以最简单的算法举例说明 C代码如下: #include <stdio.h> void main(){ int i,j; ; ;i<=;i+ ...
- STM32F103_外部RAM用作运存---IS62WV51216
https://www.cnblogs.com/lilto/p/9548736.html STM32F103_外部RAM用作运存 概述 SRAM的简介 折腾过电脑的朋友都知道,当电脑运行比较卡的时 ...