#include <iostream>
#include <algorithm>
#include <cstdio>
#include <iomanip>
#include <cmath>
#include <cstring>
#include <vector>
#include <queue>
#include <stdlib.h>
using namespace std;
struct A
{
int t1; //每个项目开始时间
int t2; //每个项目结束时间
int v; //每个项目的收益
}p[10];
int prev[10],opt[10]; //prev数组用来保存做完当前项目还可以做哪个项目,opt数组用来保存结果
int main()
{
ios::sync_with_stdio(false);
for(int i=1;i<=8;i++)
cin>>p[i].t1>>p[i].t2>>p[i].v;
for(int i=8;i>=0;i--)
{
for(int j=i-1;j>=0;j--)
{
if(p[i].t1>=p[j].t2) { prev[i]=j; break;} //保存当前项目之前的项目
}
}
for(int i=1;i<=8;i++)
{
opt[i]=max(p[i].v+opt[prev[i]],opt[i-1]); //动态转移方程 选与不选
cout<<opt[i]<<" ";
}
return 0;
}
点击打开链接 题目链接及讲解
DP入门题目及代码
最新推荐文章于 2023-07-06 21:19:03 发布