贪心题目:
思路:先切代价大的。
如果先切代价小的,那么另一个方向的相对代价较大的会切更多次,所以要先切代价大的。
代码细节:
总共切(n + m - 2)次
那么对横向和纵向的代价排序,切较大的即可。
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 2020;
int n , m , row , col;
int a[N] , b[N];
bool cmp(int x , int y)
{
return x > y;
}
int main()
{
cin >> n >> m;
for(int i = 1; i < n; i ++) cin >> a[i];
for(int i = 1; i < m; i ++) cin >> b[i];
row = 1 , col = 1; // 表示横着的块数和竖着的块数,也表示代价的下标
sort(a + 1 , a + n , cmp);
sort(b + 1 , b + m , cmp);
long long res = 0;
for(int i = 2; i < n + m; i ++)
{
if(a[row] > b[col]) res += a[row ++] * col;
else res += row * b[col ++];
}
cout << res << endl;
return 0;
}