摘要: 描述 Description中国古代的历史故事“田忌赛马”是为大家所熟知的。话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢取最多的钱?输入格式 InputFormat第一行为一个正整数n(n<=1000),表示双方马的数量。第二行有N个整数表示田忌的马的速度。第三行的N个整数为齐王的马的速度。输出格式 OutputFormat仅有一行,为田忌赛马可能赢得的最多的钱,结果有可能为负。样例输入 Sam 阅读全文
posted @ 2012-12-01 22:11 改名字干什么 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 假如不看数据的话,是一道很简单的动态规划的题目。很容易想到方程:f[i]:=min(f[i],f[i-j]+s[i]);(1<=j<=m);这个是 O(mn)的算法但是一看数据- - 一百万。优化有两种方法,一种是用堆O(nlogn), 一种使用单调队列优化O(n)。每次更新单调队列时,后面比当前状态f[i]大的全部踢走,然后把它加入队尾,同时把不能继续使用的值(序号小于当前序号减去m的值)踢走,保证了队列的单调递增性。我们就有 f[i]:=s[i]+f[d[t]](t是队列的头指针,d储存队列的数组)。然后把f[i]加入到队列之中。代码: 1 program p1313; 2 v 阅读全文
posted @ 2012-12-01 21:38 改名字干什么 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 首先,前几天周老师对我们说了一句话:“有些人是表面学得好,有些人是内在学得好”。这一道题目是9月的时候考试时碰上的,但是自己太水了,没有做出来,后面一直就没有动他,今天拿来做一做,发现向总给我们的算法真心不是很好啊。我的方法。 我们用字符串数组存下他们,然后一个一个读取。 处理呢,用字符串数组是很方便的。 例如样例CAB+-, 我们设st 为字符串数组, 先读取,有 st[1]='C' st[2]='A' st[2]='B'; 遇到运算符号,就合并最后的两个字符串数组,并记录该数组的最低级别的运算符号, 例如st[2]合并成‘A+B',最 阅读全文
posted @ 2012-12-01 21:14 改名字干什么 阅读(188) 评论(0) 推荐(0) 编辑