ZOJ ACM 1204 (JAVA)
毕业好几年了,对算法还是比較有兴趣,所以想又一次開始做ACM题。俺做题比較任意,一般先挑通过率高的题来做。
第1204题,详细描写叙述请參考,ZOJ ACM 1204
1)难度分析
这个题目,基本的难度在于要依据长度来排序。
比方1 2 3 4 5 6。结果必须为:
1+2=3
1+3=4
1+4=5
1+5=6
2+3=5
2+4=6
1+2+3=6
可是我的结果为:
1+2=3
1+2+3=6
1+3=6
。。。
2)解决方法
将结果缓存,依据长度排序后再打印。
3)AC的源代码。假设要直接提交,请将中文凝视删除。
import java.util.Collections;
import java.util.Comparator; public class Main {
static int lineNumber;
static int input[];
static int M = 4;
static boolean hasR = false;
static java.util.ArrayList<int []> results; public static void main(String[] args) {
<span style="white-space:pre"> </span>//排序算法重写
Comparator<int []> comparator = new Comparator<int []>(){
public int compare(int []r1, int []r2) { if(r1[0] != r2[0]){
return r1[0]-r2[0];
}
else {
return 0;
}
}
}; java.util.Scanner scanner = new java.util.Scanner(System.in); if(scanner.hasNext()) {
lineNumber = Integer.parseInt(scanner.nextLine());
}
int lineIndex = 0;
while(scanner.hasNext()) {
lineIndex++;
hasR = false; String lineStr = scanner.nextLine(); String strs[] = lineStr.split(" ");
M = Integer.parseInt(strs[0]);
input = new int[M];
results = new java.util.ArrayList<int []>(); for(int j=0; j<M;j++) {
input[j] = Integer.parseInt(strs[j+1]);
}
java.util.Arrays.sort(input); //<span style="font-family: Arial, Helvetica, sans-serif;">//说明:比較关键,由于一開始没有注意看题,没有考虑输入的一行数字可能是无序的,直接依照升序处理。</span> fn(0,0,0,new int[33]); if(hasR == false) {
System.out.println("Can't find any equations.");
} else {
Collections.sort(results,comparator); for(int i = 0;i<results.size();i++) {
int count = results.get(i)[0];
for(int j=1;j<=count;j++) {
System.out.print(results.get(i)[j]);
if(j<count){
System.out.print("+");
}
}
System.out.println("="+results.get(i)[count+1]);
}
} System.out.println("");
if(lineIndex == lineNumber) {
break;
}
}
} public static long fn(int i, int sum, int count, int[] res) {
long r; if(i==M)return -1;
if(sum >input[M-1]) return -1; //说明:比較关键。直接决定了算法的时间复杂度,没有这个推断。计算超时。 if (sum == input[i]) {
hasR = true;
res[count+1] = sum;
results.add(res);
} if (i < M - 1) {
int res_new[] = new int[33];
for (int k = 0; k <= count + 1; k++) {
res_new[k] = res[k];
}
res_new[0] = count + 1;
res_new[count + 1] = input[i];
fn(i + 1, sum + input[i], count + 1, res_new); fn(i + 1, sum, count, res);
} return -1; }
}
ZOJ ACM 1204 (JAVA)的更多相关文章
- ZOJ ACM 1314(JAVA)
昨天做了几个题目.过于简单,就不在博客里面写了. 1314这道题也比較简单,写出来是由于我认为在这里有一个小技巧,对于时间复杂度和空间复杂度都比較节省. 这个题目类似哈希表的求解.可是更简单.刚拿到题 ...
- ACM之Java速成(4)
ACM中Java.进制转换 Java进制转换: 由于Unicode兼容ASCII(0-255),因此,上面得到的Unicode就是ASCII. java中进行二进制,八进制,十六进制,十进制间进行相互 ...
- ACM之Java速成(3)
ACM中Java.大数处理 先上个代码: import java.math.*; import java.util.*; class Main{ public static void main(Str ...
- ACM之Java速成(2)
acm中Java的应用 Chapter I. Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点: (1) 最明显的好处是,学会Java,可以参加Java Challenge ...
- ACM中java的使用
ACM中java的使用 转载自http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html 这里指的java速成,只限于java语法,包括输 ...
- ACM之Java输入输出
本文转自:ACM之Java输入输出 一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错 ...
- ACM中java的使用 (转)
ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner ...
- ACM中Java的应用
先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了.Java的语法和C++非常类似, ...
- ACM之Java技巧
一.Java之ACM注意点 关于四舍五入 小数保留几位: DecimalFormat df = new DecimalFormat("0.00"); String num = d ...
随机推荐
- Java微信公众平台开发_06_素材管理
一.本节要点 1.官方文档的media 这个media可以理解为文件,即我们需要以POST方式提交一个文件 2.媒体文件有效期 媒体文件在微信后台保存时间为3天,即3天后media_id失效. 二.代 ...
- 记一次list循环删除元素的突发事件!
事情是这样的,由于想再回顾一下基础,就写了一个main函数,里面循环删元素的代码.如下: List<String> a = new ArrayList<String>(); a ...
- MVC页面静态化
MVC 页面静态化 最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc ...
- SAX解析文件
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import ja ...
- FPGA DDR3调试
FPGA DDR3调试 Spartan6 FPGA芯片中集成了MCB硬核,它可以支持到DDR3.在Xilinx的开发工具Xilinx ISE中提供了MIG IP核,设计者可以用它来直接生成 DDR3 ...
- IPhoneX网页布局
IPhoneX全面屏是十分科技化的,但是由于其圆角和摄像头刘海位置以及操控黑条的存在使得我们需要去对其样式做一些适配,没有X的同学可以开启 Xcode 9 的iPhone X 模拟器作为学习和调试. ...
- 享元模式(Flyweight)
享元模式(Flyweight) 享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. FlyWeightFactory负责创建和管理享元单元, ...
- eclipse 常用插件 整理
开发过程中的常用Eclipse插件,按字母排序: (1) AmaterasUML 介绍:Eclipse的UML插件,支持UML活动图,class图,sequence图,usecas ...
- Python3学习笔记2:简易Web爬虫
开发环境 基础语法那章的内容我是在Docker容器中玩的,但是真正做项目的时候,没有IDE的强大辅助功能来协助的话是很累人的一件事.因此从本文中,我选择使用Jetbrain的Pycharm这个IDE来 ...
- 三十天学不会TCP,UDP/IP编程--MAC地址和数据链路层
这篇文章主要是来做(da)推(guang)介(gao)的!由于这两年接触到了比较多的这方面的知识,不想忘了,我决定把他们记录下来,所以决定在GitBook用半年时间上面写下来,这是目前写的一节,后面会 ...