毕业好几年了,对算法还是比較有兴趣,所以想又一次開始做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)的更多相关文章

  1. ZOJ ACM 1314(JAVA)

    昨天做了几个题目.过于简单,就不在博客里面写了. 1314这道题也比較简单,写出来是由于我认为在这里有一个小技巧,对于时间复杂度和空间复杂度都比較节省. 这个题目类似哈希表的求解.可是更简单.刚拿到题 ...

  2. ACM之Java速成(4)

    ACM中Java.进制转换 Java进制转换: 由于Unicode兼容ASCII(0-255),因此,上面得到的Unicode就是ASCII. java中进行二进制,八进制,十六进制,十进制间进行相互 ...

  3. ACM之Java速成(3)

    ACM中Java.大数处理 先上个代码: import java.math.*; import java.util.*; class Main{ public static void main(Str ...

  4. ACM之Java速成(2)

    acm中Java的应用 Chapter I. Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点: (1) 最明显的好处是,学会Java,可以参加Java Challenge ...

  5. ACM中java的使用

    ACM中java的使用 转载自http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html 这里指的java速成,只限于java语法,包括输 ...

  6. ACM之Java输入输出

    本文转自:ACM之Java输入输出 一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错 ...

  7. ACM中java的使用 (转)

    ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner ...

  8. ACM中Java的应用

    先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了.Java的语法和C++非常类似, ...

  9. ACM之Java技巧

    一.Java之ACM注意点 关于四舍五入 小数保留几位:  DecimalFormat df = new DecimalFormat("0.00"); String num = d ...

随机推荐

  1. mysql将字符串转化为数字

    我的字段为内容为数字,但是类型为字符串,需要使用CASE转换即可 SELECT MAX(CAST(C_id AS UNSIGNED)) INTO id 即查询出来最大的C_id,否则会按照字符串查询最 ...

  2. 运放的PID电路

    PID就是(比例(proportion).积分(integral).导数(derivative)),在工程实际中,应用最为广泛的调节器控制规律为比例.积分.微分控制,简称PID控制,又称PID调节. ...

  3. app.config 配置多项 配置集合 自定义配置(2)

    上一篇说了利用app.config自定义节点配置,那是利用工具来实现,其实也一全部编码的方式来实现.举一个栗子.Simpson一家有父亲James,母亲Kate,和三个儿女Jim,Aaron和Luka ...

  4. C#获取存储过程的 Return返回值和Output输出参数值

    1.获取Return返回值  程序代码 //存储过程//Create PROCEDURE MYSQL//     @a int,//     @b int//AS//     return @a + ...

  5. js中的break,continue和return到底怎么用?

    为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在一起. 所以就一起来说一说,这三个看起来很简单,却常常会出错的关键词的具体用法 ...

  6. [转载] 运维角度浅谈:MySQL数据库优化

    一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 作者:zhenliang8,本文转自51CTO博客,http://lizhenliang. ...

  7. HTML的用法

    今天学习了HTMIL,标签.这个东西吧,没什么很难的,就是得多练多打.今天的一些个人心得: 标签:成对存在的名称 标签注意:1.标签名放在<> 2.标签成对存在的 3.结束标签有斜杠/ 例 ...

  8. 常见的Mysql数据库优化总结

    索引 1.主键索引 作用:唯一约束和提高查询速度 #建表时创建主键索引 create table `table_name`( `id` int unsigned not null auto_incre ...

  9. ssh、scp免秘钥远程执行命令:expect

    首先安装expect # yum -y install expect 命令格式 # ./expect IP COMM    #expect是独立的工具,所以不能用sh来执行 1 2 3 4 5 6 7 ...

  10. AIO5系统中关于赠品处理的方法

    最近频繁有人问我,关于赠品在AIO5系统中如何处理.首先AIO5系统支持赠品处理关于赠品,在AIO5系统中走的是[其他出库单]路径:仓库--仓库作业--其他出库单--新增(如下图) 通常赠品对应的业务 ...