使用动态编程实现活动选择概率

用户名

如何使用动态编程实现活动选择问题(CLRS练习16.1-1)。我已经使用贪婪方法实现了它,它在线性时间内运行(假设数组已经按完成时间排序了)。

我知道它构成了最佳子结构。

$S_{ij}$在活动$a_i$结束之后开始并且在活动$a_j$开始之前结束的活动集如果我们表示该集合的最优解的大小,$S_{ij}$ by $c[i j]$则将有递归

$c[i j]  = c[i k] + c[k j] + 1$
uSeemSurprised

我们可以通过使用动态编程来解决此问题,方法是保持一个状态,该状态包含我们迄今为止已进行的活动的当前索引和活动的当前完成时间的详细信息,在活动的每个索引处,我们可以做出2个决策,选择一个活动与否,最后,我们需要充分利用这两个选择并进行递归。我已经在c ++中实现了递归dp解决方案:

#include<bits/stdc++.h>

using namespace std;

int n;
int st[1000], en[1000];
int dp[1000][1000];

int solve(int index, int currentFinishTime){
    if(index == n) return 0;
    int v1 = 0, v2 = 0;
    if(dp[index][currentFinishTime] != -1) return dp[index][currentFinishTime];

    //do not choose the current activity
    v1 = solve(index+1, currentFinishTime);

    //try to choose the current activity
    if(st[index] >= currentFinishTime){
        v2 = solve(index+1, en[index]) + 1;
    }
    return dp[index][currentFinishTime] = max(v1, v2);
}

int main(){
    cin >> n;
    for(int i = 0;i < n;i++) cin >> st[i] >> en[i];
    memset(dp, -1, sizeof dp);

    cout << solve(0, 0) << endl;
return 0;
}

http://ideone.com/m0mxx2

在此代码dp[index][finish time]中,dp表用于存储结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用动态编程实现活动选择概率

来自分类Dev

活动选择的动态编程解决方案

来自分类Dev

集覆盖概率的变化(可能是活动选择概率)

来自分类Dev

动态数组中的概率随机选择

来自分类Dev

如何实现动态选择?

来自分类Dev

使用对象数据动态创建选择菜单并实现

来自分类Dev

使用动态编程的tsp

来自分类Dev

动态编程,选择最高的总价值

来自分类Dev

选择葡萄酒动态编程

来自分类Dev

动态html javascript菜单活动选择

来自分类Dev

如何使用自定义概率分布选择随机选择

来自分类Dev

Scala中的概率编程

来自分类Dev

使用动态编程复制书籍

来自分类Dev

使用迭代的动态编程问题

来自分类Dev

如何在活动中以编程方式选择RadioButton

来自分类Dev

如何在活动中以编程方式选择RadioButton

来自分类Dev

动态编程通过缓存实现产生不同的结果

来自分类Dev

通过线程实现动态编程算法来固定

来自分类Dev

唯一子集生成的动态编程实现

来自分类Dev

如何实现getSupportParentActivityIntent()以动态设置Android中向上按钮的活动

来自分类Dev

动态地在单个活动中实现多个片段

来自分类Dev

使用jQuery选择活动选择的值

来自分类Dev

使用活动实现的Android导航抽屉

来自分类Dev

使用ScheduledExecutorService实现不活动超时

来自分类Dev

计算R编程中的概率

来自分类Dev

关于概率的编程题(死战)

来自分类Dev

Eclipse RCP:以编程方式设置活动零件或选择不活动零件

来自分类Dev

Eclipse RCP:以编程方式设置活动零件或选择不活动零件

来自分类Dev

通过动态编程解决多项选择背包(MCKP)?