USACO 2.3.4 Money Systems 解题报告
这个题目就是一个无限背包的例子,没有任何的修改,没有任何的特殊化,直接把代码搬进去就是的: / LANG: C ID: yylogoo1 PROG: money / #include long long f[10000]; int main(void) { int i, j, t; int[......]
这个题目就是一个无限背包的例子,没有任何的修改,没有任何的特殊化,直接把代码搬进去就是的: / LANG: C ID: yylogoo1 PROG: money / #include long long f[10000]; int main(void) { int i, j, t; int[......]
这个题目刚看到谁都觉得简单,爆容易,但是仔细一想,怎么去组合数字?怎么去把符号和数字放在循环里?都是需要解决的问题,我刚开始使用的是全局变量保存那些数据,忽然发现用全局的数据太复杂了,有好多数据需要改变再还原,所以只能用局部变量,每个函数拥有一套独立的参数变量,这样及时修改了也影响不到别的函数(这里[……]
这题我折腾了一个星期,真的好死心,一个多星期一直在查到底是哪里出了问题,从感觉上算法是没有错误的,而且能够拿90分,那问题到底出在哪里呢?这一题我反反复复得找,再看标程,对着看,终于昨晚上找到了,算法没有一点问题,实现上有问题,超过了int 的范围,所以数据就出现了错误,然后就OVER了。 题目的[……]
这个题目我也不知道这算法叫什么,反正就是用f[i]记录第i个字符能否到达,如果可以到达再把所有的元素一个个和i之后的进行比较,如果完全相同那么就把f中那个元素的长度加上i的值标记为1。 其实怎么说呢,就是有一个大的数组记录第i个是否能够有那些元素组成,如果可以就从这里再和所有的元素比较下,如果有相[……]
初看到题目,十个有九个人想用暴力枚举又不知道何从下手吧,哈哈,其实你把这几种按钮的所有组合在一起尝试一下可以清晰地发现只有八种情况,而且只用保存前6位数字就够了,因为后面都是循环的,啥?看不懂这鬼解题报告?话说其实这题你看代码最直截了当: de lang="c">/ LAN[……]
这题首先是一个枚举,从输入的数加一开始每个数字都看是不是题目所要的数。判断方法如下: 先把数字用字符串保存起来,然后读取一个数字并且标记为’x’,再读取一个,判断是否为’x’,如果为x就不是要求的数字,如果不是就继续读取,直到每个数字都被读取了,并且最后指针回到了第一个位置,那么这就是所需要的那个[……]
这一题是一个动态规划题,f[i][j]是i个数字(1, 2, 3, 4, .., i)能够组成和为i的个数,那么方程式是f[i][j] = {f[i – 1][j – k] + f[i – 1][j]} (1 <= k <= i),再DP就是的,代码如下: / LANG: C ID: y[......]
这题一开始确实会感觉很难,但是罗马数字的个位只有可能是{"I", "II", "III", "IV", "V", "VI", "VII", "VIII[……]
这题的话,话说感觉就是一个暴力的枚举,没多余要考虑的,一方面对所有整数开始枚举,设当前枚举的是i,那么在用i和所有已知的海明码进行比较,海明距离大于等于D的话就成为一个新的海明码,一直枚举出N个海明码。 得出海明距离也很简单,就从第一个位开始,一个不同的就记录一下,我直接把8位都枚举一次,所以B这[……]
咋一看,真是一个爆难的题目,但是仔细一想,其实也很简单,怎么个简单呢?对于每种食物来说,只有两种选择:吃或不吃,对吧,暴力枚举就是,只有2^15种方案,虽然数字还是非常大的,但是一秒钟的时限还是超不了,代码晚点发,在Linux下。 代码来了: / ID: yylogoo1 PROG: holste[......]