zoukankan      html  css  js  c++  java
  • 活动调度

    dp + greedy实现

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <vector>
     5 #include <algorithm>
     6 #include "nothing.h"
     7 #include <string>
     8 
     9 using namespace std;
    10 
    11 int c[105][105];
    12 int dp_activity_selector(const vector<int> &s, const vector<int> &f, int beg_time, int end_time);
    13 void activity_selector(const vector<int> &s, const vector<int> &f)
    14 {
    15     memset(c, -1, sizeof(c));
    16     dp_activity_selector(s, f, 0, f[f.size() - 1] + 1);
    17     cout << "dp_activity_selector:" << c[0][f[f.size() - 1] + 1];
    18 }
    19 
    20 int dp_activity_selector(const vector<int> &s, const vector<int> &f, int beg_time, int end_time)
    21 {
    22     int &ans = c[beg_time][end_time];
    23     if (ans >= 0)return ans;
    24     if (beg_time >= end_time)return 0;
    25     ans = 0;//必须初始化,不然可能return-1
    26 
    27     for(int i=0;i<s.size();i++)
    28         if (beg_time <= s[i] && end_time >= f[i])
    29         {
    30             int ret = dp_activity_selector(s, f, beg_time, s[i]) + dp_activity_selector(s, f, f[i], end_time);
    31             if (ret + 1 > ans)ans = ret + 1;
    32         }
    33     return ans;
    34 }
    35 
    36 void iterative_activity_selector(const vector<int> &s, const vector<int> &f)
    37 {
    38     const int n = s.size();
    39     int beg = f[0];
    40     int ans = 1;
    41     for(int i=1;i<n;i++)
    42         if (beg < s[i])
    43         {
    44             ++ans;
    45             beg = f[i];
    46         }
    47     cout << "iterative_activity_selector:" << ans << endl;
    48 }
    49 
    50 
    51 int _recursive_activity_selector(const vector<int> &s, const vector<int> &f, int k, int cur_time);
    52 void recursive_activity_selector(const vector<int> &s, const vector<int> &f)
    53 {
    54     cout << "recursive_activity_selector:" << _recursive_activity_selector(s, f, 0, 0) << endl;
    55 }
    56 
    57 int _recursive_activity_selector(const vector<int> &s, const vector<int> &f, int k, int cur_time)
    58 {
    59     if (k >= s.size())return 0;
    60     if (s[k] >= cur_time)
    61         return 1 + _recursive_activity_selector(s, f, k + 1, f[k]);
    62     return _recursive_activity_selector(s, f, k + 1, cur_time);
    63 }
  • 相关阅读:
    [WP]XCTF-Reversing-Newbie_calculations
    [WP]BUUCTF-Reverse-基础题(1-12)
    [WP]XCTF-notsequence
    [WP]XCTF-easyre-153
    [WP]XCTF- 攻防世界-crypto-新手练习区
    [WP]XCTF-simple-check-100
    [WP]XCTF-SignIn
    [WP]XCTF-666
    [WP]XCTF-Reversing-x64Elf-100
    [WP]XCTF-流浪者
  • 原文地址:https://www.cnblogs.com/schsb/p/8717688.html
Copyright © 2011-2022 走看看