反悔贪心,按照时间对花朵进行排序,从0到n-1遍历花朵,如果当前堆中元素小于当前花朵的绽放时间t,直接放入堆中,否则花朵金币数放入堆中并弹出堆中金币数最小值,最后如果堆中元素个数大于k,一直弹出堆中最小金币数直到元素个数等于k
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
const int N=1e5+5;
int t[N], w[N];
int main()
{
int n, k;
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>t[i];
}
for(int i=0;i<n;i++){
cin>>w[i];
}
vector<pair<int,int>> v;
for(int i=0;i<n;i++){
v.push_back({
t[i], w[i]});
}
priority_queue<int, vector<int>, greater<int>> pq;
sort(v.begin(), v.end(), [](const pair<int,int>& p1, const pair<int,int>&p2){
return p1.first < p2.first;
});
int ans = 0;
for(int i=0;i<n;i++){
if(v[i].first > int(pq.size())){
pq.push(v[i].second);
ans+=v[i].second;
}else{
ans+=v[i].second - pq.top();
pq.push(v[i].second);
pq.pop();
}
// if(pq.size())
}
// cout<<pq.size()<<" ";
while(int(pq.size()) > k){
ans-=pq.top();
pq.pop();
}
cout<<ans;
}
先构造二叉搜索树,询问的时候再进行递归求节点深度
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
struct node{
node* l = nullptr,*r = nullptr;
int v;
node(int v1):v(v1){
}
};
node* root = nullptr;
void insert(int i){
if(root==nullptr){
root = new node(i);
}else{
node* pre = root;
node* tmp = root->v>i? root->l:root->r;
while(tmp!=nullptr){
pre = tmp;
tmp = tmp->v>i? tmp->l:tmp->r;
}
tmp = new node(i);
if(pre->v > i){
pre->l = tmp;
}else{
pre->r = tmp;
}
}
}
int find(int i){
node* tmp = root;
int deep = 1;
while(tmp!=nullptr){
tmp = tmp->v>i? tmp->l:tmp->r;
deep++;
}
return deep;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
int a;
cin>>a;
insert(a);
}
for(int i=0;i<n;i++){
int a;
cin>>a;
cout<<find(a)<<endl;
}
}
使用动态规划, 遍历1到n座城市,dp[i][j]表示到达第i座城市且花费j时间的最大旅行活动数
转移方程 d p [ i ] [ j ] = m a x ( d p [ i ] [ j ] , d p [ i − 1 ] [ k ] + 在第 i 座城市花费 j − k − t [ i ] 获得旅行活动数 ) dp[i][j] = max(dp[i][j], dp[i-1][k] +在第i座城市花费j-k-t[i]获得旅行活动数) dp[i][j]=max(dp[i][j],dp[i−1][k]+在第i座城市花费j−k−t[i]获得旅行活动数)
这里代码超时了,还没想好优化思路,后面有时间再补上
用枚举加贪心,枚举前 i i i个城市, 除去旅行时间,剩下remain时间,遍历前 i i i个城市,每次选择最大活动数量,时间复杂度 O ( n 2 m ) O(n^2m) O(n2m) 代码如下
//动态规划超时
#include <iostream>
#include <queue>
#include <vector>
#include<cstring>
#