PAT-Top-1002 Business (35分) 动态规划(0-1背包)

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;
}

猜你喜欢

转载自blog.csdn.net/jal517486222/article/details/104329932