贪心+二分
查看原帖
贪心+二分
419670
xiaowanghahahaha楼主2025/1/18 16:12

核心思想(贪心):将连续的数组A分成三部分,A[l,p],A[p],A[p+1,r],并隐性地对该数组A整体减去A[p],其中A[p]为最小值。对数组A[l,p]和A[p+1,r]如法炮制。

#include <iostream>
using namespace std;
int ans = 0;

void divide(int l, int r, int nums[], int work){
	if(l==r) return;
	int p = -1;
	int minnum = 10010;
	for(int i=l; i<r; i++){
		if(nums[i] < minnum) {
			minnum = nums[i];
			p = i;	
		}
	}
	ans += minnum - work;
	divide(l, p, nums, minnum);
	divide(p+1, r, nums, minnum);
}


int main(){
	int n;
	cin >> n;
	int nums[n];
	for(int i=0; i<n; i++){
		cin >> nums[i];
	}
	
	divide(0, n, nums, 0);
	cout << ans << endl;
	
	
	return 0;
} 
2025/1/18 16:12
加载中...