`
jessej
  • 浏览: 8552 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

1558 Euro Efficiency

    博客分类:
  • ACM
J# 
阅读更多

悲剧的,做了一天,本来用DFS回溯,很快写出了解法,但是发现超时啊。。提交了n次。。研究了半天。。

 

最后放弃,改用另外的做法来做。解题的思路也换了。40分钟搞定了。

 

 

import java.util.Scanner;

/*
 * 思路转换,将题意理解为用6个数填充1-100这个数组,
 * 如1 24 34 39 46 50
 * 那么a[1]=1 a[24]=1 ... a[50]=1,这些为第一层
 * 循环,a[25](24+1 =25) a[23](24-1=23) = 2...
 * 依次类推,将1,2之类记为层数,n即位2数的层数之和,a[25]即为层数为2(n==2)的层数构成
 * 第一次,先记录层数为1的数,即currency
 * 第2次先产生层数为2的数,第3次产生层数为1+2 或2+1的数
 * 第i次产生层数为 i + n-i的数
 * 思路如此。。。继续编码
 */
public class Main {
	
	public static void main(String[] args) {
		int currency[] = {1, 24, 34, 39, 46, 50};
		
		
		Scanner sc = new Scanner(System.in);
		int num = Integer.parseInt(sc.next());
		do{
			getCurrency(sc, currency);
			num --;
			calculate(currency);
		}while(num != 0);
	}
	public static void getCurrency(Scanner sc, int [] currency){
		for(int i = 0; i < 6; i ++){
			currency[i] = sc.nextInt();
		}
	}
	public static void calculate(int currency[]){
		int res[] = new int[101];
		for(int i = 0 ; i < 6 ; i ++){//产生第一层
			res[currency[i]] = 1;
		}
		int count = 6;
		int n = 2;//层次之和
		while(count < 100){//跳出循环的条件为count == 100
			for(int i = 1 ; i < 101; i ++){
				for(int j = 1 ; j < 101 ; j ++){
					for(int k = 1 ; k < n; k ++){//控制层数
						if(res[i] == k && res[j] == n-k){
							if( i + j <= 100 &&res[i + j] == 0){
								res[i+j] = n;
								count ++;
							}
							if(i != j && res[Math.abs(i-j)] == 0){
								res[Math.abs(i-j)] = n;
								count ++;
							}
						}
					}
				}
			}
			n ++;
		}
		double sum = 0;
		int max = 0;
		for(int i = 1 ; i < 101 ; i ++){
			sum += res[i];
			if(max < res[i]){
				max = res[i];
			}
		}
		System.out.printf("%.2f %d\n", sum/100, max);
	}
}

//另附上弄了好久的代码,虽然超时。。但是也搞了好久。。不留作纪念说不过去。。悲剧!
import java.util.Scanner;
/*
 * 悲剧的超时了
 * DFS暴力
 */
public class EuroEfficiency {

	public static int []currency = new int[6];
	public static int result[] = new int[201];//-100 -1 0(->100) 1 100	共201个
	public static int res = 101;
	public static void calculate(int money, int total){
		if(money == 0){
			if(res > total){
				res = total;
			}
			return ;
		}
		if(total >= res){
			return ;
		}
		if(money >0){
			for(int i = 5; i >= 0; i --){
				if(total + 1 >= res ){
					break;
				}
				if(money - currency[i] >= (-1 * currency[5])){
					if(result[money - currency[i] + 100] != 0){
						calculate(0, total + result[money - currency[i] + 100]+1);
					}else{
						calculate(money - currency[i], total + 1 );
					}
				}
			}
		}else{
			for(int i = 0; i <6; i ++){
				if(total + 1 >= res ){
					break;
				}
				if(money + currency[i] <= currency[5]){
					if(result[money + currency[i] + 100] != 0){
						calculate(0, total + result[money + currency[i] + 100]+1);
					}else{
						calculate(money + currency[i], total + 1 );
					}
				}
			}
		}
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.next());
		do{
			getCurrency(sc);
			n --;
			double sum = 0;
			int max = 1;
			for(int i = 1; i <= 100; i ++){
				res = 101;
				calculate(i, 0);
				result[i+100] = res;
				sum += res;
				if(res > max){
					max = res;
				}
			}
			for(int i = 100 ; i < 201; i ++){
				System.out.println(result[i]);
			}
			
			System.out.printf("%.2f %d\n",sum/100, max);
		}while(n != 0);
	}
	
	public static void getCurrency(Scanner sc){
		result = new int[201];
		for(int i = 0; i < 6; i ++){
			currency[i] = sc.nextInt();
		}
	}
}

分享到:
评论

相关推荐

    翠欧新产品EURO404和EURO408简介.pdf

    根据提供的文件内容,以下是对翠欧新产品EURO404和EURO408的详细介绍以及相关知识点: 翠欧EURO404和EURO408是专门面向OEM机械制造商设计的高性能运动控制器,旨在提供强大且成本效益高的控制解决方案。这两款产品...

    刷机软件LGMDP_EURO

    【LGMDP_EURO】是一款专为LG品牌手机设计的刷机软件,主要用于LG KU990和KE998这两款型号的设备进行系统升级或恢复出厂设置。这款软件的重要性和实用性在于它能够帮助用户解决手机可能出现的各种软件问题,如系统...

    Euro-NCAP测试标准2023

    【Euro-NCAP测试标准2023】是欧洲新车安全评鉴协会(Euro NCAP)为确保汽车安全性能而设定的一系列严格测试规范。这个协会致力于提升车辆的安全标准,通过对即将上市的新车进行评估,为消费者提供车辆安全性的权威信息...

    Euro Ncap Roadmap 2022+2025

    Euro NCAP 2022+2025公路安全路线图 Euro NCAP 2022+2025公路安全路线图是一个旨在提高汽车安全性的计划,涵盖了人车安全、自动驾驶、车联网通信等多方面的技术。该路线图将汽车安全分为三个方面:初级安全、次级...

    Euro-NCAP LSS车道支持系统实施细则-中文.pdf

    1. 文件标题《Euro-NCAP LSS车道支持系统实施细则-中文》表明,文件是欧洲新车评估项目(Euro-NCAP)关于车道支持系统(Lane Support System, LSS)操作细则的中文版本。Euro-NCAP是一个独立的汽车安全评估机构,...

    Euro-NCAP碰撞评分EXCEL表格

    欧洲Euro-NCAP汽车碰撞安全评分最新EXCEL表格,含全部开放的VBA源码。

    EuroData_Creator 用于将视频或者图片转化为Euro数据集的格式.zip

    EuroData_Creator 用于将视频或者图片转化为Euro数据集的格式 EuroData_Creator 用于将视频或者图片转化为Euro数据集的格式 EuroData_Creator 用于将视频或者图片转化为Euro数据集的格式 EuroData_Creator 用于将...

    euro-ncap-aeb-lss-vru-test-protocol-v400.pdf

    欧洲新车评估计划(Euro NCAP)的"AEB/LSS VRU Systems Test Protocol"是一份针对自动紧急刹车系统(AEB)和行人与轻型车辆安全系统(LSS)的测试规范,版本为4.0.0,发布于2021年6月。这份文档详细阐述了Euro NCAP...

    基于 Euro-NCAP 的自动紧急制动系统算法开发

    Euro-NCAP(欧洲新车安全评价协会)从2014年起在汽车安全评价中增加了自动紧急制动系统(AEB)测试评分项。AEB系统是一种主动安全技术,能够在检测到即将发生碰撞时,自动采取制动措施,以减轻或避免碰撞。未装配有...

    euro-ncap-assessment-protocol-sa-safe-driving-v100.pdf

    欧洲新车评价规程(Euro NCAP)是汽车行业的一个重要标准机构,致力于提高汽车安全性能。2023年的评估协议V10.0版重点关注驾驶员安全辅助系统,包括驾驶员状态监测(DMS)、占用者状态监测(OMS)、自动紧急制动...

    Euro NCAP roadmap 2020-2025

    ### Euro NCAP Roadmap 2020-2025:关键技术点解析 #### 一、概述 《Euro NCAP Roadmap 2020-2025》是欧洲新车评估计划(Euro NCAP)针对未来五年汽车安全技术的发展方向及目标所制定的战略规划。这份文件详细阐述...

    Euro NCAP 致力于提高重型卡车的安全性,这是朝着实现“零伤亡愿景”目标迈出的重要一步 这一目标旨在消除交通死亡和重伤事故

    Euro NCAP 致力于提高重型卡车的安全性,这是朝着实现“零伤亡愿景”目标迈出的重要一步。这一目标旨在消除交通死亡和重伤事故。尽管重型货车(HGV)在欧洲道路上的车辆总数中所占比例很小,但它们在严重事故中的...

    one euro filter

    One Euro filter for filter and smooth signals via double exponential filter

    7.1 LSS:Euro NCAP TEST PROTOCOL – Lane Support systems V2_0_1.pdf

    ### 欧洲新车评估程序(Euro NCAP) - Euro NCAP是一个独立的汽车安全评估项目,旨在通过碰撞测试和安全技术评估,为消费者提供新车的安全信息。 - 该项目定期更新测试协议和评分标准,以促进汽车制造商开发更安全的...

    215000euro

    标题“215000euro”似乎与金额或者某个特定的数字序列有关,而描述同样是这个短语,这可能表明我们关注的是一个与欧元金额相关的设计元素,比如字体设计。在字体标签的支持下,我们可以推断这个压缩包可能包含一种或...

    euro-ncap-lss-test-protocol-v10.pdf

    ### Euro NCAP LSS Test Protocol V10:车道支持系统测试协议详解 #### 概述 《Euro NCAP LSS Test Protocol V10》(欧洲新车评估计划——车道支持系统测试协议第10版)是一份由欧洲新车评估计划(Euro NCAP)发布...

    euro-ncap 相关最新法规 AEB ELK LSS AD

    标题中的“euro-ncap”指的是欧洲新车评估计划(European New Car Assessment Programme),这是一个针对汽车安全性能进行独立测试和评级的组织。该计划旨在提高车辆的安全标准,保护乘客及行人的生命安全。法规更新...

    EURO NCAP开展自动驾驶试验.pdf

    EURO NCAP自动驾驶试验报告 EURO NCAP是一个欧洲新车评估计划,其主要目的是评估汽车的安全性和环保性。近年来,自动驾驶技术逐渐兴起,EURO NCAP也开始关注自动驾驶技术对汽车安全性的影响。本报告将详细介绍EURO...

    Euro NCAP HWA测试流程(中英文)

    《Euro NCAP HWA测试流程(中英文)》是一份详细阐述了欧洲新车安全评鉴协会(Euro NCAP)对于高速公路辅助系统(Highway Assist, HWA)的测试与评估协议的文档。这份资料旨在确保ADAS(Advanced Driver Assistance ...

    Laravel开发-euro16

    【Laravel开发-euro16】是一个基于 Laravel 框架构建的应用程序,它利用了 Laravel 的强大功能来提供一个CLI(命令行界面)工具,让用户能够获取并追踪2016年欧洲足球锦标赛(也被称为欧洲杯)的实时信息。...

Global site tag (gtag.js) - Google Analytics