Flower
反悔贪心,按照时间对花朵进行排序,从0到n-1遍历花朵,如果当前堆中元素小于当前花朵的绽放时间t,直接放入堆中,否则花朵金币数放入堆中并弹出堆中金币数最小值,最后如果堆中元素个数大于k,一直弹出堆中最小金币数直到元素个数等于k
#include #include #include #include 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 cin>t[i]; } for(int i=0;i cin>w[i]; } vector v; for(int i=0;i v.push_back({t[i], w[i]}); } priority_queue return p1.first 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 int a; cin>a; iNSErt(a); } for(int i=0;i int a; cin>a; cout int n, m; cinnm; for(int i=2;i cin>t[i]; } for(int i=1;i cin>e[i]; } for(int i=1;i cin>d[i]; } memset(dp, -1, sizeof dp); dp[1][0] = 0; for(int i=1;i if(e[1] - d[1]*(i-1) =0 ) dp[1][i] = dp[1][i-1] + e[1] - d[1]*(i-1); else{ dp[1][i] = dp[1][i-1]; } // cout // dp[i] for(int j=0; j // dp[i][j] = dp[i-1][j]; for(int k=0;k if(dp[i-1][k]!=-1) dp[i][j] = max(dp[i][j], dp[i-1][k] + (long long)e[i]*(j-k-t[i]) - (long long)(j-k-t[i])*(j-k-t[i] -1)*d[i]/ 2); // cout // ios_base::sync_with_stdio(false); // cin.tie(NULL); int n, m; // cinnm; scanf("%d%d", &n, &m); t[1] = 0; for (int i = 2; i // cint[i]; scanf("%d", &t[i]); } for (int i = 1; i // cine[i]; scanf("%d", &e[i]); } for (int i = 1; i // cind[i]; scanf("%d", &d[i]); } std::vector for (int j = 0; e[i] - j * d[i] 0 && j p[i].emplace_back(e[i] - j * d[i]); } } int ans = 0; int travel = 0; for (int i = 1; i travel += t[i]; memset(pos, 0, sizeof pos); int remain = m - travel; if(remain //否则remain为负数会进入循环,一直没找到这个错误 int id = -1, mx = 0; for (int j = 1; j if(pos[j] == p[j].size())continue; if (p[j][pos[j]] mx) { id = j; mx = p[j][pos[j]]; } } if (id != -1) { tmp_ans += p[id][pos[id]]; pos[id] ++; remain--; } else { break; } } ans = max(ans, tmp_ans); } printf("%d", ans); } int n; cinn; for(int i=1;i cinarr[i][1] arr[i][2] arr[i][3]; } memset(dp, -1, sizeof dp); // dp[2][1][2] = arr[2][1] + arr[1][2]; // dp[2][1][3] = arr[2][1] + arr[1][3]; dp[2][2][1] = arr[2][2] + arr[1][1]; // dp[2][2][3] = arr[2][2] + arr[1][3]; dp[2][3][1] = arr[2][3] + arr[1][1]; // cout dp[i][1][2] = dp[i-1][2][1] + arr[i][1]; dp[i][1][3] = max(dp[i-1][3][1], dp[i-1][3][2]) + arr[i][1]; dp[i][2][1] = max(dp[i-1][1][2], dp[i-1][1][3]) + arr[i][2]; dp[i][2][3] = max(dp[i-1][3][1], dp[i-1][3][2]) + arr[i][2]; // cout dp[i][1][2] = dp[i-1][2][1] + arr[i][1]; dp[i][1][3] = max(dp[i-1][3][1], dp[i-1][3][2]) + arr[i][1]; dp[i][2][1] = max(dp[i-1][1][2], dp[i-1][1][3]) + arr[i][2]; dp[i][2][3] = max(dp[i-1][3][1], dp[i-1][3][2]) + arr[i][2]; dp[i][3][1] = max(dp[i-1][1][3], dp[i-1][1][2]) + arr[i][3]; dp[i][3][2] = dp[i-1][2][3] + arr[i][3]; } ans = max(ans, max(max(max(dp[n][3][1], dp[n][3][2]), dp[n][1][2]), dp[n][1][3])); // cout