不加权区间调度动态规划代码
时间: 2024-05-25 22:08:56 浏览: 98
动态规划代码
不加权区间调度问题是一个典型的动态规划问题,可以使用贪心算法或动态规划来解决。其中,动态规划是一种更加普适的解决方案,可以处理更加复杂的情况。
不加权区间调度问题的动态规划解法包括以下步骤:
1. 对所有区间按照结束时间进行排序;
2. 定义状态:令 $f_i$ 表示前 $i$ 个区间中所选区间的最大数量;
3. 状态转移方程:$$ f_i = \max(f_i, f_{j}+1) $$ 其中 $j$ 表示区间 $j$ 的结束时间早于区间 $i$ 的开始时间。
4. 最终结果:最大数量为 $f_n$。
以下是不加权区间调度问题的动态规划代码(C++实现):
```
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct Interval{
int start;
int end;
};
bool cmp(Interval a, Interval b){
return a.end < b.end;
}
int main(){
vector<Interval> intervals;
int n;
cin >> n;
for(int i = 0; i < n; i++){
int start, end;
cin >> start >> end;
intervals.push_back({start, end});
}
sort(intervals.begin(), intervals.end(), cmp);
vector<int> f(n+1, 0);
for(int i = 1; i <= n; i++){
f[i] = 1;
for(int j = 1; j < i; j++){
if(intervals[j-1].end <= intervals[i-1].start){
f[i] = max(f[i], f[j]+1);
}
}
}
cout << f[n] << endl;
return 0;
}
```
阅读全文