- 李强凌 的博客
7月day1
- @ 2025-7-15 19:42:44
#暑假打工
题解 现在有N份一次性工作可供选择。如果你接受并完成第i份工作,你将在完成后的第Ai天获得Bi元的报酬。 每天你最多可以接受并完成其中一份工作。 但是,你不能重复接受已经做过的工作。 求在从今天起不超过M天的时间内,你能获得的最大总报酬。 你可以从今天就开始工作。
思路, 运用贪心,运用优先队列(二叉树),用动态数组 求出期限内可得最高工资
题解
#include <bits/stdc++.h>
using namespace std;
priority_queue<int> q;
priority_queue<int, vector<int>, greater<int>> w;
vector<pair<int,int>> jobs;
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
int ai, bi; cin >> ai >> bi;
jobs.push_back({ai, bi});
}
sort(jobs.begin(), jobs.end());
int idx = 0, ans = 0;
for (int day = 1; day <= m; day++)
{
while (idx < n && jobs[idx].first <= day)
{
q.push(jobs[idx].second);
idx++;
}
if (q.size() != 0)
{
ans += q.top();
q.pop();
}
}
cout << ans << endl;
return 0;
}
#T4我喜欢因式分解
题意 给定一个整数n,找出一对整数a,b,使a * a* a * a * a - b * b * b * b * b = n
思路 暴力枚举,控制范围 运用双层嵌套for循环
题解
#include <bits/stdc++.h>
using namespace std;
long long o;
int main(){
cin>>o;
for(long long i=-200;i<=200;i++){
for(long long j=-200;j<=200;j++){
if((i*i*i*i*i)-(j*j*j*j*j)==o){
cout<<i<<' '<<j;
return 0;
}//TODO
}//TODO
}
return 0;
}