贪心算法的习题答案

例题实战 1

java 复制代码
package tanxin;

import java.util.*;

public class tanxin {
	public static void main(String args[]) {
		Scanner scan=new Scanner(System.in);
		
		List <Integer> list=new ArrayList<>();//list集合存储部落人数
		int n=scan.nextInt();
		for(int i=0;i<n;i++) {
		int a=scan.nextInt();
			list.add(a);
		}
		Collections.sort(list);
		long sum=0;//花费
		while(list.size()>1) {
			int a=list.get(0);
			int b=list.get(1);
			sum+=a+b;
			list.remove(0);
			list.remove(0);//当我们移除第一个部落时,第二个部落的下标也变成了0
			list.add(a+b);//新部落的人数加到list集合中
			Collections.sort(list);//再次进行排序
			
		}
		System.out.print(sum);
		
	
	}
}

例题实战 2

java 复制代码
package lanqiao;

import java.util.*;

public class tanxin {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int arr[]=new int [n];
		for(int i=0;i<n;i++) {
			arr[i]=scan.nextInt();
		}
		int q=scan.nextInt();
		int []d=new int[n];
		while(q-->0) {
			int l=scan.nextInt()-1;
			int r=scan.nextInt()-1;
			d[l]+=1;
			if(r+1<n) {
				d[r+1]-=1;
			}
		}
		for(int i=1;i<n;i++) {
			d[i]+=d[i-1];
		}
		long ans=0;
		for(int i=0;i<n;i++) {
			ans+=(long)arr[i]*d[i];
		}
		Arrays.sort(arr);
		Arrays.sort(d);
		long res=0;
		for(int i=0;i<n;i++) {
			res+=(long)arr[i]*d[i];
		}
		System.out.println(res-ans);
	}
	
}
相关推荐
biter down24 分钟前
C++ 解决海量数据 TopK 问题:小根堆高效解法
c++·算法
用户66006766853927 分钟前
斐波那契数列:从递归到缓存优化的极致拆解
前端·javascript·算法
初夏睡觉33 分钟前
P1055 [NOIP 2008 普及组] ISBN 号码
算法·p1055
程芯带你刷C语言简单算法题37 分钟前
Day28~实现strlen、strcpy、strncpy、strcat、strncat
c语言·c++·算法·c
踏浪无痕1 小时前
周末拆解:QLExpress 如何做到不编译就能执行?
后端·算法·架构
一个不知名程序员www1 小时前
算法学习入门--- 树(C++)
c++·算法
如竟没有火炬1 小时前
四数相加贰——哈希表
数据结构·python·算法·leetcode·散列表
背心2块钱包邮1 小时前
第9节——部分分式积分(Partial Fraction Decomposition)
人工智能·python·算法·机器学习·matplotlib
仰泳的熊猫1 小时前
1148 Werewolf - Simple Version
数据结构·c++·算法·pat考试
chao1898441 小时前
MATLAB中的多重网格算法与计算流体动力学
开发语言·算法·matlab