摘要: http://ace.delos.com/usacoprob2?a=HM3rU6DlsPt&S=subset 这题最初的想法是:DFS,因为两个集合理论上是一样的,所以处理时只需处理一个集合,另一个集合自然就出来了。 DFS的程序很好写,这是主要的实现函数: void dfs(int suml,int h) //sum保存当前的集合元素的和,h保存上一次取的数{ if (s... 阅读全文
posted @ 2012-10-31 16:31 ay27 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 何谓数字表达式?形如这样的东西:1+2*3-4/5-3^2+(3-1)为简单起见,我的程序只包括以下符号:数字0~9,+-*/%^(),当然还有正负号 (注意^符号是次方的意思,比如说2^3,指2的3次方,%指求余符号)对于一个数字表达式,必定有以下规则:1.对于二目运算符,即+-*/^,运算符的左右两边必须是数字或括号;2.对于单目运算符,即正负号,运算符的左边不能是数字或括号,右边必须是数字或括号;3.括号内部运算完成后必定产生一个数字,因此括号的两边(指一对括号的两边),必须是运算符;4.运算顺序必须正确,即符合数学习惯上的运算顺序;5.除数不能为0;6.。。。。。简单起见,我把这解析器 阅读全文
posted @ 2012-10-27 16:37 ay27 阅读(252) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=tOdxUub2T3T&S=preface 这题最简单的是直接枚举。 当然,你可以用数学的方法分析求解,你甚至可以用打表的方法= = 这题麻烦的地方在于如何把一个数准确的转变成那些字符。 把数字直接拆分,然后统计。比如说: 对于439,把它拆分成400+30+9,就是:CD+XXX+IX 对于498,拆分成400+90... 阅读全文
posted @ 2012-10-25 19:57 ay27 阅读(138) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=4g9XJlxo9kU&S=hamming 懂异或的人都会这题。水题,不过要了解好题意,这里的两两编码之间的距离指的不是一定要在邻近位置,应该是所有数都应该成立的一条规定。 比如样例: 0 7 25 30 42 45 51 52 75 76 82 85 97 102 120 127 25与其他所有数都应该满足海明距离,... 阅读全文
posted @ 2012-10-22 18:21 ay27 阅读(135) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=kPNDMRfiMdD&S=holstein 这题开始时看错题了,以为只需输出最少饲料数就行了。提交后发现出问题了,然后一直改,改得不像样了。。。。 这题的数据太小了,直接DFS就行了,就算搜遍整个搜索树,也就2^15吧,因为每种饲料只有用和不用两种情况,刚好对应二进制的0和1。 如果数据大了,估计就是DP了。 这题输出有... 阅读全文
posted @ 2012-10-22 17:25 ay27 阅读(170) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=kPNDMRfiMdD&S=sort3 这题初看似乎比较麻烦,仔细想想,也就这么回事了。 手工模拟一下排序的过程,然后对比排序前后的数列,很容易发现,交换只发生在以下情况:1.交换一次能够使得两个数都到达最终位置(这个显然的);2.两次交换能够使得三个数到达最终位置。只能有这两种情况了。 位置: 1 2 ... 阅读全文
posted @ 2012-10-22 17:14 ay27 阅读(169) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=B9V6yMSRsQa&S=frac1 对这一题彻底无语。。。。。 简单的排序,竟然放在chapter2中。。。。 而最可恨的是USACO的评测。。。 #include <iostream>#include <cstdio>#include <algorithm>using namespace std; const ... 阅读全文
posted @ 2012-10-17 17:29 ay27 阅读(144) 评论(3) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=B9V6yMSRsQa&S=castle一题简单而综合的题,主要问题是输入数据的存储和处理。我定义的存储方式:struct node{ bool dd[4]; int room; node() { for (int i=0;i<4;i++) dd[i]=false; room=0; }}a[55][55];其中,a[][]数组存储整个图,dd数组存储4个方向的可行性,0~4分别代表S,E,N,W,room存储是第几个房间。这样,存储的问题解决了。对... 阅读全文
posted @ 2012-10-17 16:42 ay27 阅读(137) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=GILo2ACzmVw&S=checker 经典到烂的n皇后问题。。。题目最坑的地方是不能打表。。。 朴素的DFS是绝对不行的,要改,怎么改?最简单的是改判断方法。 这是最朴素的判断函数: bool check(int dep,int x){ for (int i=1;i<dep;i++) if ... 阅读全文
posted @ 2012-10-11 20:41 ay27 阅读(113) 评论(0) 推荐(0) 编辑
摘要: http://ace.delos.com/usacoprob2?a=0ypAbo0pjhC&S=sprime我的想法很简单,就是先生成一位数的素数,在这基础上生成二位,然后再生成三位四位。。。有一个很简单但是很实用的优化,注意到,素数的各位必定是1,3,7,9,当然一位的素数2,3,5,7,另当别论。这样,我们只需在前一位的基础上添上1,3,7,9,然后逐个判断是否为素数。很简单,但是效率很高。百度上有人用DFS,不过生成方法基本类似。有人先求出所有素数再拆开来判断,都可以。nocow上展示的一个用DP写的程序,真是大神了。。。#include <iostream>#inc 阅读全文
posted @ 2012-10-11 18:58 ay27 阅读(170) 评论(0) 推荐(0) 编辑