[题解+总结]20150920/20150921

1、20150920

<1> 第k短路径

大概题意:找一张图上的第k短路径。

题解:Dijkstra+A*算法,也可以用Dijkstra乱搞,甚至有复杂度较高但是依旧能够过的DFS乱搞。

<2> 最长公共子串

大概题意:求两个字符串的最长公共子串。

题解:后缀数组裸题。O(n^2)动规只有30分。

<3> 体育馆

大概题意:双重带权线段覆盖最大值问题。

题解:这道题和贪心什么的没有任何关系,起码目前还没有听说有这么做能够对的。已知唯一一个能够AC的是最小费用最大流,还有个动态规划,没听懂。详细解析一下最小费用最大流:

  ①处理费用:首先一定存在一个疑问:本题不存在费用,只有收益。这个地方设计得非常巧妙,由于在裸最小费用最大流中我们是尽可能找费用小的,这里我们尽可能找收益大的,那么我们可以把收益置为负数来作为费用计算,故存在最小费用即最大收益;

  ②构图思路:假设共有n天,首先,我们设置1~n共n个节点,将他们从小到大有向连接起来,对于每一条路径,收益为0,因为如果从第i天到第i+1天什么事都不干的话,是没有收益的;流量为2,因为有两块场地;

  ③添加企业:对于某家企业要求在第x天到第y天占用,收益为z。根据上述构图,如果要引入该家企业,则需要占用一块场地,则相当于需要1的流量,费用即收益的相反数。连接的两个点为第x点与第y+1点。

  ④源点汇点:设置0号节点和n+1号节点,费用,收益同样分别为2,0;

  ④跑最大流:从0号节点起跑最小费用最大流,答案即为最小费用/最大收益。

  非常喜欢这种思路,虽然说网络流这一块复杂度普遍都比较高,常数也不小,但是对于小数据,或者是实在没有想到正解的情况下,用网络流也是不错的,代码相对来说并不难写。

2、20150921

<1> 侦察员

大概题意:存在一张3*n的0-1地图,要求从最左端走到最右端,只有0可以经过。当且仅当当前处于中间一行时,可以将身边8个格子的数值顺时针转移。求转移次数最少而满足条件。

题解:DP/记忆化搜索。

<2> 密码串

大概题意:存在一个密码串和原始串,要求还原原始串为答案。还原方式:对于答案的每一个字符,前面都会添加一个密码串,但是会夹杂一些其他的字符。

题解:O(n)模拟。

<3> 正面战场

大概题意:给出一个10^9内的数n,要求在10^9内找出若干个数a,使a*a的后九位数为n。n和a均允许存在前导0。

总结:我没话讲。真的傻逼了。唉。我死命着从完全平方数的性质和推论寻找奇偶关系优化,尾数判断优化等等若干,优化到1.8-3s,实在找不出了。结果可想而知是0分。考完后我看到了其他人的代码几乎是崩溃的。同样是枚举,我竟然没想到按位来搜?呵呵。

题解:首先可以明确是9位数,那么从第一位起从0到9枚举,只要当位满足,就递归到下一位。状态量大大减小,显然不是所谓的O(n^m)。呵呵。

<4> 拯救fish

大概题意:给出一张有向图,从1号点出发,每一次可以选择一个后继节点作为下一次更多的一个出发点。也就是说如果当前从1号点中选择了与其相连的2号点,下次,可以分别从1号点和2号点出发找节点。问最快可以几次找完所有节点。

总结:题目本身貌似std都有问题,暴力80分。我们有各种贪心方式,甚至连样例都过不了的贪心竟然AC了,想不通。我也曾想到过,但是显然错误得不能再错误了,也是又加了优化。但是加优化的过程中写错了一个傻逼地方,我真的无语,虽然我也不能确定这种方法是否存在完全正确性,但是90分总比40分好看。

题解:贪心。由于数据的问题我不能名正言顺地说哪种方法是对的。首先对于一个点u如果能够被点v选择,则称v为u的父亲节点。我的方法是,对于任意节点,首先预处理出能够选择节点的个数,以及他是否只有一个父亲,其父亲的儿子中存在这种节点的个数。最初将1号节点加入可操作节点集合中,对于当前处理的节点,优先选择那些只认当前节点为父亲的节点,其中又优先儿子节点最多的儿子节点,直到所有节点都在可操作节点集合中。

时间: 2024-08-04 12:49:14

[题解+总结]20150920/20150921的相关文章

洛谷 P1079 Vigen&#232;re 密码 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1079 题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为 南军所广泛使用. 在密码学中,我们称需要加密的信息为明文,用 M 表示:称加密后的信息为密文,用 C 表示:而密钥是一种

8.8联考题解

今天的T1让我怀疑我是不是在做奥赛题--这考的是什么知识点啊这个,会不会用绝对值函数? Evensgn 的债务 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Evensgn 有一群好朋友,他们经常互相借钱.假如说有三个好朋友A,B,C.A 欠 B 20 元,B 欠 C 20 元,总债务规模为 20+20=40 元.Evensgn 是个追求简约的人,他觉得这样的债务太繁杂了.他认为,上面的债务可以完全等价为 A 欠C20 元,B 既不欠别人,别人也不欠他.这样总债务规模就压缩到了 

POJ 2533 - Longest Ordered Subsequence(最长上升子序列) 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:http://poj.org/problem?id=2533 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numeric sequence (a1, a2, ..., aN) be any sequence (ai1, ai2, ..., aiK)

(leetcode题解)Pascal&#39;s Triangle

Pascal's Triangle  Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Return [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 题意实现一个杨辉三角. 这道题只要注意了边界条件应该很好实现出来,C++实现如下 vector<vector<int>> generate(int

2017ZZUACM省赛选拔试题部分题解----谨以纪念我这卡线滚粗的美好经历

写在前面: 其实心里有些小小的不爽又有点小小的舒畅,为啥捏?不爽当然是因为没被选拔上啦,舒畅捏则是因为没被选拔上反而让自己警醒,学长也提点很多很多."沉下去,然后一战成名"学长如是对我说,我很开心.其实这完全算不算是题解,只是我个人的一些小想法而已.而且到现在还有一题不会...让自己长点记性吧. 题目 A :聪明的田鼠 Time Limit: 1 Sec Memory Limit: 128 MB Description 田鼠MIUMIU来到了一片农田,农田可以看成是一个M*N个方格的矩

LeetCode-001题解

此题目摘自LeetCode001 Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2.

leetcode题解: Next Permutation

最近还一直在刷leetcode,当然,更多时候只是将题解写在自己的电脑上,没有分享出来.偶尔想起来的时候,就写出来. public class Solution { public void nextPermutation(int[] nums) { if(nums==null||nums.length<=1) return; nextPermutationHelp( nums,0,nums.length-1); } public void nextPermutationHelp(int []nu

HDU 5014 Number Sequence(2014 ACM/ICPC Asia Regional Xi&#39;an Online) 题解

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014 Number Sequence Problem Description There is a special number sequence which has n+1 integers. For each number in sequence, we have two rules: ● ai ∈ [0,n] ● ai ≠ aj( i ≠ j ) For sequence a and sequ

HDU 1045 Fire Net 二分图Bipartite题解

本题可以使用DFS直接爆搜出答案,不过这样类型的题目其实是个二分图的题解. 这个二分图,难不在Hungary算法,而是难在于建图.需要挺高的抽象思维的. 建图: 1 把同一行不被X分开的格子标同一个号码,被X分开的标下一个号码,这样做是为了缩点,不需要把所有的格子都分开标号,而且可以更方便建个更加小的图. 2 同理把同一列的格子标号 3 然后判断相同一个格子的行标号和列标号是有路径的,其他不在同一个格子的都是没有路径的. 4 这样就等于以行标号和列标号作为左右顶点,构建成一个二分图了 然后使用H