2020-10-24 算法训练营buu 贪心策略练习(排序练习)

贪心策略(假) 排序(真)

基本上三题都是因为排序被卡了一会

p1230 智力大冲浪

p1230 智力大冲浪

题目描述

原有m奖金
但第i事件没完成就会扣除wi的奖金

在n个时间内每个事件都有一个期限ti,在ti时间后该事件就不能完成。

求一个完成事件的顺序来保证扣的钱最少。

思路:

先让事件以w从大到小排序(贪心第一下),后从w最大的事件开始,把该事件放在他的截止时间点上(贪心第二下)。

被卡住的点

快排中mid的值不能改变的。

这是错的

void qsort(int l,int r){
	int mid = (l+r)/2;
	int i = l,j = r;
	
	do{
		while(game[i].w > game[mid].w) i++;
		while(game[mid].w > game[j].w) j--;
		if(i <= j){
			swap(i,j);
			i++;
	    	j--;
		}

	}while(i<=j);
	if(l<j) qsort(l,j);
	if(i<r) qsort(i,r);
}

这是对的

void qsort(int l,int r){
	int mid = game[(l+r)/2].w;
	int i = l,j = r;
	
	do{
		while(game[i].w > mid) i++;
		while(mid > game[j].w) j--;
		if(i <= j){
			swap(i,j);
			i++;
	    	j--;
		}

	}while(i<=j);
	if(l<j) qsort(l,j);
	if(i<r) qsort(i,r);
}

p2094 运输

p2094 运输

题目描述

有n个商品,每次合并两件,合并后的商品的价值为(a+b)/k,a,b是第一件第二件商品,k是题目给出的量。

求最后合并的成唯一商品,最少多少钱。

思路

合并石子问题,就是说从第一次合并的开始,对于/
k要执行n%2次,对于第二次/k,要执行n%4.
也就是说,先合并的费用减小的多。

那么从大到小合并一下就可以了

p1056 排座椅

p1056 运输

题目描述

教室为M x N,给出有前后相邻的同学,或者左右相邻的同学。
然后可以设置k条横向走廊,设置l条纵向走廊。
求最优的方案使得相邻同学最少。

思路

桶排,记录第i 和 i+i行有多少对相邻的同学,列同理。

然后从大到小排序后,得到在哪些行放走廊

最后再对答案从小到达排序输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值