1002 Business (35分)
题目传送门:1002 Business (35分)
一、题目大意
任务调度··
二、解题思路
刚开始用dfs超时了···然后参考了某位网友的思路,使用动态规划写出来了
参考题解:https://blog.csdn.net/qq_41562704/article/details/100826468
三、AC代码
#include<bits/stdc++.h>
using namespace std;
const int N = 51;
struct Node{
int p, l, d;
bool operator<(const Node&that)const{
return d < that.d;
}
};
int len = 0;
vector<Node>v;
int main(){
int n;
cin >> n;
v.resize(n);
for(int i = 0; i < n; i++){
cin >> v[i].p >> v[i].l >> v[i].d;
}
sort(v.begin(), v.end());
len = v.back().d;
vector<vector<int> >dp(n+1, vector<int>(len+1, 0));
for(int i = 1; i <= n; ++i){
for(int j = 1; j <=len; ++j){
int t = min(j, v[i-1].d) - v[i-1].l;
if(t >= 0){
dp[i][j] = max(dp[i-1][j], dp[i-1][t] + v[i-1].p);
}else{
dp[i][j] = dp[i-1][j];
}
}
}
cout << dp[n][len] << endl;
}