贪心算法的习题答案

例题实战 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);
	}
	
}
相关推荐
前端炒粉39 分钟前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
断剑zou天涯3 小时前
【算法笔记】窗口内最大值或最小值的更新结构
java·笔记·算法
smj2302_796826523 小时前
解决leetcode第3753题范围内总波动值II
python·算法·leetcode
骑着猪去兜风.5 小时前
线段树(二)
数据结构·算法
fengfuyao9856 小时前
竞争性自适应重加权算法(CARS)的MATLAB实现
算法
散峰而望6 小时前
C++数组(二)(算法竞赛)
开发语言·c++·算法·github
leoufung6 小时前
LeetCode 92 反转链表 II 全流程详解
算法·leetcode·链表
wyhwust6 小时前
交换排序法&冒泡排序法& 选择排序法&插入排序的算法步骤
数据结构·算法·排序算法
利刃大大7 小时前
【动态规划:背包问题】完全平方数
c++·算法·动态规划·背包问题·完全背包
wyhwust7 小时前
数组----插入一个数到有序数列中
java·数据结构·算法