求不相交的线段最大权值和(动态规划)
题目描述:已知n个线段,起点终点分别保存在tBegin【】和tEnd【】数组中,n个线段的权重保存在数组value【】中,求:
选择若干线段,满足两两不重叠,且所选线段权值和最大
笔记
1.将若干时间按照“结束时间”从小到大排序时,注意结束时间相同的情况(应该将时间长度小的放到后面)
2.动态规划的二维表DP【】数据设置为1开始,会方便理解,而且0行或者0列的数据,可以用作边界判断;
代码: 代码片
.
// An highlighted block
#include<stdio.h>
int F_DP(int *b,int *e,int Max,int n,int*v){
//解决okok!
//总结一下,动态规划解决问题:选择若干线段(不出现重叠)最大权值和问题
// 按照结尾时间排序:相同时要把时间长度短的放在后面!!
//用动态规划,比起递归更直观看到过程的结果!
int dp[n+1][Max+1];
int i,j;
for(j=0;j<=Max;j++){
dp[0][j]=0;
}
for(i=1;i<=n;i++){
dp[i][0]=0;
}
for(i=1;i<=n;i++){
for(j=1;j<=Max;j++){
dp[i][j]=dp[i-1