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 ...
随机推荐
- springboot集成实现秒杀
springboot集成开发实现商场秒杀 加入主要依赖 <dependency> <groupId>org.springframework.boot</groupId&g ...
- Coursera-吴恩达机器学习课程笔记-Week1
参考资料: 吴恩达教授机器学习课程 机器学习课程中文笔记 Week 1 一. 引言 机器学习模型可分为监督学习Superviese learning(每个数据集给出了正确的值)和无监督学习Unsupe ...
- 安卓开发:Android Studio自动import
我只想说,真好用!哈哈,提高效率的好东西. 参考: [https://blog.csdn.net/pjdd123/article/details/80953669] [https://www.cnbl ...
- springboot 注解@EnableConfigurationProperties @ConfigurationProperties作用
@EnableConfigurationProperties 在springboot启动类添加,当springboot程序启动时会立即加载@EnableConfigurationProperties注 ...
- python的爬虫小入门
爬虫的相关操作 1.爬文本内容 # coding=gbk import requests ##声明相关库 import re response=requests.get('http://duanziw ...
- markdown区块
Markdown 区块 Markdown 区块引用是在段落开头使用 > 符号 ,然后后面紧跟一个空格符号: > 区块引用 > 菜鸟教程 > 学的不仅是技术更是梦想 显示结果如下 ...
- MYSQL命令练习及跳过数据库密码进行密码重新设置
2.看当前所有数据库:show databases; 3.进入mysql数据库:use mysql; 4.查看mysql数据库中所有的表:show tables; 5.查看user表中的数据: ...
- 「JSOI2013」旅行时的困惑
「JSOI2013」旅行时的困惑 传送门 由于我们的图不仅是一个 \(\text{DAG}\) 而且在形态上还是一棵树,也就是说我们为了实现节点之间互相可达,就必须把每条边都覆盖一次,因为两个点之间的 ...
- 服务器(1)——IIS(1)——Windows7中IIS简单安装与配置(详细图解)
最近工作需要IIS,自己的电脑又是Windows7系统,找了下安装的方法,已经安装成功. 一.首先是安装IIS.打开控制面板,找到“程序与功能”,点进去 二.点击左侧“打开或关闭Windows功能” ...
- 九、Appium-python-UI自动化之通过text定位
1.通过xpath定位text xpath路径为://android.widget.EditText[@text='请输入包含街道的完整地址'] 2.通过AndroidUIAutomator # 这个 ...