#暑假打工

题解 现在有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;
}