#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6 + 5, inf = 1e9;
int a[maxn];
struct Node{
int a, b;
bool operator < (const Node x)const{
return a * b < x.a * x.b;
}
};
map<pair<int, int>, bool> mp;
void solve(){
int n;
cin >> n;
int m, k;
cin >> m >> k;
priority_queue<Node> pq;
pq.push({n, m});
mp[{n, m}] = 1;
for(int i = 1; i <= k; i++){
auto u = pq.top();
if(i == k){
cout << u.a * u.b << '\n';
break;
}
pq.pop();
//记得用map判重
if(u.a >= 2 && !mp[{u.a - 1, u.b}]) pq.push({u.a - 1, u.b}), mp[{u.a - 1, u.b}] = 1;
if(u.b >= 2 && !mp[{u.a, u.b - 1}]) pq.push({u.a, u.b - 1}), mp[{u.a, u.b - 1}] = 1;
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int T = 1;
// cin >> T;
while(T--){
solve();
}
return 0;
}
设F(i, j) 为以(0, 0)为左下角,以(i, j)为右上角的矩形面积,对于1 <= i <= n, 1 <= j <= m, 求F(i, j)的第k大的值
最新推荐文章于 2024-11-15 20:16:11 发布
该篇文章介绍了一种使用C++编程语言实现的贪心算法,解决给定矩阵乘积的最大值问题。通过优先队列和map数据结构,对矩阵中的节点进行操作,寻找最优解并避免重复计算。
摘要由CSDN通过智能技术生成