算法导论 16-1.1活动选择问题 动态规划解
来源:互联网 发布:吃鸡要加装什么软件吗 编辑:程序博客网 时间:2024/06/05 12:08
#include <iostream>#include <string>using namespace std;#define N 11void dynamic_activity_selector(int c[N+1][N+1], int rec[N+1][N+1], int s[N+1], int f[N+1]){ for(int i = 1; i <= N; i++) for(int j = 2; j <= N; j++) { if(i >= j) c[i][j] = 0; else { for(int k = i+1; k <= j-1; k++) if(f[i] <= s[k] && f[k] <= s[j])//保证k的兼容性 { if(c[i][j] < c[i][k] + c[k][j] + 1)//递归计算公式 { c[i][j] = c[i][k] + c[k][j] + 1; rec[i][j] = k; } } } }}void print(int rec[N+1][N+1], int i, int j)//自顶向下(从后往前)递归寻找最优k值{ if(i<=j) { print(rec, i, rec[i][j]); if(rec[i][j] != 0)//k值非零时,后序输出 cout<<"a"<<rec[i][j]<<" "; }}int main(){ int s[N+1] = {-1,1,3,0,5,3,5,6,8,8,2,12};//起始时间 int f[N+1] = {-1,4,5,6,7,8,9,10,11,12,13,14};//结束时间 int c[N+1][N+1] = {0};//最大兼容子集中的活动数 int rec[N+1][N+1] = {0};//用于标记最优k值 dynamic_activity_selector(c,rec,s,f); for(int i = 1; i < 12; i++) { for(int j = 1; j < 12; j++) cout << c[i][j]<<" "; cout<<endl; } cout<<"最大子集数为: "<<c[1][N] + 2<<endl;//a1和a未算在内,要加上 cout<<"最大子集为: {a1 "; print(rec, 1, N); cout<<"a"<<N<<"}";}
输出:
最大子集数为: 4
最大子集为: {a1 a4 a8 a11}
0 0
- 算法导论 16-1.1活动选择问题 动态规划解
- 【算法导论】用动态规划解活动选择问题
- 算法导论 活动选择问题(动态规划方法)
- 算法导论 16.1-1活动选择问题的动态规划算法 答案
- 算法导论--贪心算法与动态规划(活动选择问题)
- 活动选择问题-动态规划/贪心算法
- 算法导论活动选择问题
- 活动选择问题的动态规划解
- 活动选择问题(动态规划算法和贪心算法)
- 活动选择问题(动态规划和贪心算法)
- 活动选择问题(贪心算法vs动态规划)
- 算法导论第16章 贪心算法-活动选择问题
- 《算法导论》笔记 第16章 16.1 活动选择问题
- [算法导论读书笔记]活动选择问题
- 算法导论16.1 活动选择问题
- 算法导论16.1 活动选择问题
- 【算法导论】动态规划--装配线调度问题
- 算法导论:动态规划 切钢条问题
- appium三种等待元素的方法
- eight(hdu-1043)(待修正)
- ie浏览器下载rar文件,变成do文件
- Why do I keep getting 'SVN: Working Copy XXXX locked; try performing 'cleanup'?
- 从源码来分析ThreadLocal、Message、Handler、Looper、MessageQueue
- 算法导论 16-1.1活动选择问题 动态规划解
- 自定义一个背景可以滚动的tab栏
- freeMarker简单小总结
- python处理json
- 后台如何拼接easyUI tree格式的 json数据 构建动态树
- 相似性︱python+opencv实现pHash算法+hamming距离(simhash)(三)
- 无题
- poj 1178 Camelot(floyed+动规)
- Linux中修改网卡名字&修改IP地址报错