算法目前存在问题,待解决。。

  活动选择问题是一类任务调度的问题,目标是选出一个最大的互相兼容的活动集合。例如:学校教室的安排问题,几个班级需要在同一天使用同一间教室,但其中一些班级的使用时间产生冲突,一些班级的时间是兼容的,我们需要找出最大的相互兼容的这样一个集合。实际上,运用‘贪心’的思想,可以准确又效率的找出这样一个集合,但为了练习一下动态规划,这篇使用了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 - 活动选择问题的更多相关文章

  1. 基于visual Studio2013解决算法导论之049活动选择问题

     题目 活动选择问题 解决代码及点评 // 活动选择问题.cpp : 定义控制台应用程序的入口点. // #include<iostream> #define N 100 using ...

  2. (Java实现) 活动选择

    活动选择的类似问题都可以这么写 import java.util.ArrayList; public class huodongxuanze { /** * //算法导论中活动选择问题动态规划求解 * ...

  3. D - 活动选择

    Description 学校的大学生艺术中心周日将面向全校各个学院的学生社团开放,但活动中心同时只能供一个社团活动使用,并且每一个社团活动开始后都不能中断.现在各个社团都提交了他们使用该中心的活动计划 ...

  4. SDUTOJ 1298 活动选择

    #include<iostream> #include<memory.h> using namespace std; int a[105],b[105],c[105],d[10 ...

  5. 吉哥系列故事――临时工计划(dp)

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Descr ...

  6. URAL 1203 Scientific Conference(贪心 || DP)

    Scientific Conference 之前一直在刷计算几何,邀请赛连计算几何的毛都买见着,暑假这一段时间就做多校.补多校的题目.刷一下一直薄弱的DP.多校假设有计算几何一定要干掉-.- 题意:给 ...

  7. 从CR线下活动学到的:如何组织一个小的线下活动

    作者:朱克锋 邮箱:zhukefeng@iboxpay.com 转载请注明出处:http://blog.csdn.net/linux_zkf 周末在腾讯组织了GR,活动达到了预期的收获,从这次活动我主 ...

  8. 一道简单树形dp

    题意:给定一棵树,从中选出一些节点,使得不成父子关系的节点对数最多.问这个最大值是多少. 思路:首先既然是给定一颗树,先要选择合适的数据结构,来保存这颗树.由于这颗树只关心根节点在哪里,所以只需要用一 ...

  9. 树形$dp$学习笔记

    今天学习了树形\(dp\),一开始浏览各大\(blog\),发现都\(TM\)是题,连个入门的\(blog\)都没有,体验极差.所以我立志要写一篇可以让初学树形\(dp\)的童鞋快速入门. 树形\(d ...

随机推荐

  1. Go语言 二分查找算法的实现

    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,二分查找算法的前提是传入的序列是有序的(降序或升序),并且有一个目标值. 二分查找的核心思想是将 n 个元素分成大 ...

  2. 官方不再支持Python2,如何将你的项目完美迁移到Python3?

    Python 2.x 很快就要失去官方支持了,不过不用慌,从 Python 2 迁移到 Python 3 却并没有想象中那么难.我在上周用了一个晚上的时间将一个 3D 渲染器的前端代码及其对应的 Py ...

  3. plupload上传视频插件jQuery+php

    我在网上找到一个很好的视频上传插件,经过我的一些整理.补充,在这里分享给大家. 这个视频插件是新浪微博plupload上传视频插件,支持格式有mpg,m4v,mp4,flv,3gp,mov,avi,r ...

  4. 更改yii框架入口文件位置,修改前后端访问路径

    将frontend/web/index.php复制到项目根目录,修改为: <?php defined('YII_DEBUG') or define('YII_DEBUG', true); def ...

  5. 「CF815C」Karen and Supermarket

    传送门 Luogu 解题思路 树形背包. 设 \(f[i][j][0/1]\) 表示在以 \(i\) 为根的子树中选 \(j\) 件商品的最少花费. 边界条件: \(f[i][j][0] = \min ...

  6. 2_1 aabb

    输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数字也相同).

  7. jdk基础提升

    1. treeMap,treesSet 作用:1具有对应普通的Map,Set的功能,2.能排序Map和Set  (依赖树的结构进行排序---中序循环) TreeSet<String> tr ...

  8. JavaSE复习~基本数据类型

    数据类型 java有两大类数据类型:基本数据类型 和 引用数据类型 基本数据类型 整数型:byte.short.int.long 浮点型:float.double 字符型:char 布尔型:boole ...

  9. 23 JavaScript规范与最佳实践&性能&箭头函数

    大多数web服务器(Apache等)对大小写敏感,因此命名注意大小写 不要声明字符串.数字和布尔值,始终把他们看做原始值而非对象,如果把这些声明为对象,会拖慢执行速度 对象是无法比较的,原始值可以 不 ...

  10. 基于springboot通过注解AOP动态切换druid多数据源--mybatis

    控制于接口之上: 开始:demo地址  在lsr-core-base中 自定义注解: /** * @Description: 数据源切换注解 * @Package: lsr-microservice ...