摘要: 其实巨水...然而 不用scanf prinf 根本过不了.....真无聊第一版代码有点问题 效率不高 主要是考虑到这个家族有可能一开始就是个森林 不是从树里分出去的实际上数据点还是一棵树 然后变成的森林 这样的话只要三个数组就可以了alive记录是否活着sons记录每个人的子节点个数father记... 阅读全文
posted @ 2015-07-29 00:46 雨尘之林 阅读(653) 评论(0) 推荐(0) 编辑
摘要: 字符串水题, 但是最后一步关于计算重复度的还是很好玩的地方。另外就是注意代码简洁性、可读性的练习。#include #include #include using namespace std;char getNumber(char c){ if(c=='-' or c=='Q' or c=='... 阅读全文
posted @ 2015-07-29 00:41 雨尘之林 阅读(452) 评论(0) 推荐(0) 编辑
摘要: http://acm.sjtu.edu.cn/OnlineJudge/problem/4020一上手就来了一个删点 排序+DFS.... 虽然正确性没问题 但是超时 只有60分. 主要在于不知道怎么减少搜索量思路就是删除一些肯定不能在的点, 然后经过条件判断 DFS地去搜索最长的路径#include... 阅读全文
posted @ 2015-07-29 00:36 雨尘之林 阅读(731) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #include using namespace std; int k,n,m; bool map[1000+5][1000+5]; bool vis[1000+5][1000+5]; int dx[4] = {0,0,-1,+1}; int dy[4] = {+1,-1,0,0}; void init(){ cin>>n... 阅读全文
posted @ 2015-07-29 00:10 雨尘之林 阅读(481) 评论(5) 推荐(0) 编辑
摘要: 这个题只用BFS来搜索一次会很麻烦, 因为每次经过一个宝藏之后,要把所有的vis重置(因为可以重复经过同一点, 但是这样会有很多不必要的路径)看题目的暗示 最多只有5个宝藏 我们要把所有的宝藏收集齐全, 如果确定了收集的顺序, 那么也就确定了路径那么可以知道 A55的排列一共是120种路径 遍历起来... 阅读全文
posted @ 2015-07-29 00:07 雨尘之林 阅读(715) 评论(0) 推荐(0) 编辑
摘要: ...被输入给坑了 应该先把所有的空格删掉再玩 还有就是测试点里好像根本就没有关于后结合的事情...不过后结合也很简单 控制一下优先级的判断即可.中缀表达式的处理核心就是两个堆栈的维护一个是 操作符栈一个是 操作数栈只有当 当前正在处理的操作符的优先级大于(不考虑后结合时) 栈顶操作符的时候, 才进... 阅读全文
posted @ 2015-07-28 23:57 雨尘之林 阅读(500) 评论(0) 推荐(0) 编辑
摘要: 和石子合并很像, 为了对环状进行处理, 我们可以把输入数据复制一份接连在后边. 这样在最后的结果枚举起点找最大即可.注意这里代价的计算, 因为我们的data[i]只记录了珠子的头 , 珠子的尾部即是下一个珠子的头部.//因为计算dp[i][j]时需要用到dp[i][k]k比j小 所以j要顺序DP也需... 阅读全文
posted @ 2015-07-25 00:35 雨尘之林 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 简单的DP, 处理的时候尽量用len从1到n) , i 从 1 到 len-n] 来遍历.注意这个时候 len 表示的是从i开头之后接连len个元素组成的序列for (int i = n-1; i >=1 ; --i){ for (int j = i+1; j <= n ; ++j){ ... 阅读全文
posted @ 2015-07-25 00:16 雨尘之林 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 此题倒是能用贪心骗点分...其实对于每一个位置 , 我们知道最后的改善结果一定是原数列中的数 .(因为要尽量减少消耗, 可以考虑减小至和相邻的相同) 有了这个结论之后, 我们就考虑用dp来做这件事情首先 存下所有数据于 data[]排序data 得到 data_sort[]然后用dp[i][j]来表... 阅读全文
posted @ 2015-07-24 23:35 雨尘之林 阅读(539) 评论(0) 推荐(0) 编辑
摘要: 更新...最后发现根本不用在循环中判断是否是素数, 因为先除的肯定是素数, 后面的以该素数的倍数组成的合数早就被除没了.....//新的build() 注意最后一位的处理void build(){ int sq = sqrt(ori); int i; for (i = 2;... 阅读全文
posted @ 2015-07-22 15:29 雨尘之林 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 这个要把dp[i]的状态分成两类 第一类是以)结尾的, 第二类是以a结尾的.#include using namespace std;const int mod = 19301; unsigned long long dp[10000];int n;void build(){ dp[0]=1;... 阅读全文
posted @ 2015-07-22 15:18 雨尘之林 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 这个DP要用状态分类下标的思想, 把dp[i]分成dp[i][0]和dp[i][1]来处理 0表示不翘课 1表示翘课, 这样可以更好的利用逻辑关系高精度就不放在这里了,只有核心代码int main(int argc, char const *argv[]){ int n; cin>>n;... 阅读全文
posted @ 2015-07-22 15:16 雨尘之林 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 优先队列自动解决了动态排序问题,非常好用。。。#include #include #include #include using namespace std;int n;int seeds[10000];int presum[10000];priority_queue,greater > q;voi... 阅读全文
posted @ 2015-07-22 15:08 雨尘之林 阅读(451) 评论(0) 推荐(0) 编辑
摘要: 水题也要优化效率嘛1.用两个数组单独记录下标的更新2.用STL中lower_bound来进行二分查找.要注意lower_bound的返回值意义 是大于等于val的第一个,所以返回值要进行判断才可以利用#include #include #include #include using namespac... 阅读全文
posted @ 2015-07-20 17:26 雨尘之林 阅读(691) 评论(0) 推荐(0) 编辑
摘要: dp[i][j][k][l]表示同时从(1,1)到(i,j)和从(1,1)到(k,l) 的 最大热心程度。(= = 三维的优化 有时间在搞。。)注意这里有个地方和别人不太一样,我是判断如果终点重复的时候,直接减去一次那个点得好心度,表示有一条经过时该位置的人的好心度是0;#include using... 阅读全文
posted @ 2015-07-20 16:00 雨尘之林 阅读(528) 评论(0) 推荐(0) 编辑
摘要: 扫雷玩得好还是有点好处的......这个题一开始像从后向前按照第一排的数字进行DFS 发现自己真傻,先不说这种情况下每个数字的填写情况很多, 还要处理相邻位置的问题。所以可以对每一位有没有地雷进行枚举。处理每一位的时候,要保证上一个数字是合理的,否则不用进行下去了,类似回溯,注意have变量的处理就... 阅读全文
posted @ 2015-07-20 15:54 雨尘之林 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 一开始用了模拟的方法,DFS来搜索,但是因为当n很大的时候有很多的重复计算,因为会踏过重复的点进行重复的操作,而且不能不走这些重复的路径,因为没有存储结果,最后只过了三个点。考虑到重复的路径,所以想到利用动态规划。可以认为dp[i][j]表示的是 从左上角开始走,走出以(1,1)到(i,j)为两个端... 阅读全文
posted @ 2015-07-18 15:01 雨尘之林 阅读(577) 评论(0) 推荐(0) 编辑
摘要: 一开始想贪心,类似启发式搜索的感觉...后来觉得不行,而且很难写。不如就枚举。可以通过0到2^W的中的每一个数的二进制形式来对应,第一行每个位置是否作为中心点放入十字格子的情况。当此处为0时表示不放,1时表示放。为什么只枚举第一行的所有情况就可以了呢。因为第一行的情况确定之后,我们可以通过推理先改变... 阅读全文
posted @ 2015-07-18 14:24 雨尘之林 阅读(450) 评论(0) 推荐(0) 编辑
摘要: Description小M有很多个机器人,他们要么一直说真话,要么一直说假话。然后每个人都说:(1). 不到N个人比我工作得多(2). 至少M个人的工资比我高。保证没有两个人的工作一样重,也没有两个人的工资一样高,问至少有多少机器人?Input Format一行两个数整数N, M (1≤N,M< 2... 阅读全文
posted @ 2015-07-15 10:49 雨尘之林 阅读(624) 评论(0) 推荐(0) 编辑
摘要: 非常简单的DP如果dp[i,j]表示从0到i 和 从0到j 这两段的相似度,那么可以知道每个dp[i,j]是由三种状态转化过来的第一种 当dna1[i]==dna2[j]的时候dp[i-1,j-1] + 1 长度加1第二种 否则 从下面两个状态过来那就是dp[i][j-1] 和 dp[i-1][j]... 阅读全文
posted @ 2015-07-15 10:11 雨尘之林 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 这个题第一眼以为只是一个简单的序列型DP问题,于是快速的写下了下面的代码。#include using namespace std; /* 看着只是简单的序列DP..不知道有没有坑 DP[k]表示的是有前k个活动可以选择时的答案 */ struct state{ int health;//体力... 阅读全文
posted @ 2015-07-10 17:00 雨尘之林 阅读(560) 评论(0) 推荐(0) 编辑
摘要: 这个题很多地方暗示了DP的路径。我们处理时,dp[i][j]可以认为是从i坐标到j坐标的序列达到回文效果需要的最小代价,以此向外扩展,最终得到dp[0][M-1]就是结果。我们要注意到处理dp[i][j]时,我们需要知道 dp(i+1,j-1)的结果,所以i必须降序,j必须升序,才能保证在计算dp(... 阅读全文
posted @ 2015-07-10 16:46 雨尘之林 阅读(638) 评论(0) 推荐(0) 编辑
摘要: 我们发现这个题里每一种“移动套餐”用的次数只有0,1,2,3 是有效的,4和0是一样的。所以我们开一个数组rot[10]来记录这9个套餐分别用了多少次。字典序的处理和我们的枚举顺序息息相关。我们从 000000000 到 333333333 来枚举的话,第一个符合条件的结果当然就是所有答案中字典序最... 阅读全文
posted @ 2015-07-10 16:37 雨尘之林 阅读(659) 评论(0) 推荐(0) 编辑
摘要: 很简单 不用太考虑效率 虽然每次都要重新排序注意vector的使用,非常便利。还有一个技巧就是用一个have型bool数组来记录是否存在。#include #include #include using namespace std;bool have[1000] = {0};vector v; //... 阅读全文
posted @ 2015-07-10 16:31 雨尘之林 阅读(483) 评论(0) 推荐(0) 编辑
摘要: 思想来自:http://blog.pureisle.net/archives/475.html主要思想是用1和0来表示是否被填,然后根据两行之间的状态关系来构建DP方程。1.首先初始化第一行 计算第一行可以被横着填的方案数。此时cnt是1 所以其实合法的dp[1][j]都是12.然后开始构建第二行至... 阅读全文
posted @ 2015-07-08 17:48 雨尘之林 阅读(425) 评论(0) 推荐(0) 编辑
摘要: #include #include #include using namespace std;struct person{ int data; int id;};int l[1001],r[1001];//存储编号为i的左边的编号和右边的编号int data[1001];//存储编号为i... 阅读全文
posted @ 2015-07-08 17:42 雨尘之林 阅读(302) 评论(0) 推荐(0) 编辑
摘要: http://acm.sjtu.edu.cn/OnlineJudge/problem/1382注意到 排序之后 i从前向后扫描时,cur恰好是从后向前的,所以即使是双重循环,也是O(n)的算法。#include #include using namespace std;int N,S;unsigne... 阅读全文
posted @ 2015-07-08 16:02 雨尘之林 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 枚举法就好了,推理很麻烦,感觉也做不出来。创造一个结构体,一个是真实的数,一个是花费的牙签数。构建一位数,两位数,三位数即可。#include #include using namespace std;//从0到9耗费的牙签数int cost[10]={6,2,5,5,4,5,6,3,7,6};st... 阅读全文
posted @ 2015-07-08 15:57 雨尘之林 阅读(404) 评论(0) 推荐(0) 编辑
摘要: 典型的BFS,找到起点直接进行搜搜即可。要注意的就是层数的处理。坐标到id的转换。还有就是要尽早判断是否达到终点。代码注释很详细,最后面两个函数是一开始写的 用抽取邻接矩阵+Dijkstra 来算的,很麻烦 头脑一热的结果。。#include #include #include using name... 阅读全文
posted @ 2015-07-07 22:16 雨尘之林 阅读(392) 评论(0) 推荐(0) 编辑
摘要: 状态压缩,当我们的状态太多时可以考虑用bit来存储,用二进制来表示集合,用&来取交集,用^来异或。DP过程很简单,遍历所有情况取最短路径就行,因为最短哈密顿回路本身就是一个NPC问题,效率不高。#include #include using namespace std;//最短哈密顿回路问题 NP完... 阅读全文
posted @ 2015-07-06 23:21 雨尘之林 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 虽然DLX可以提高效率....但是对于NPC问题也不用太追求效率了,而且还只有一个测试点。所以 只要DFS不断的填入,直到空格全部被填满;要注意的是DFS中全局变量的更新和恢复。至于存储的方法,只要考虑每一行每一列每一个小块的不重复即可。#include #include using namespa... 阅读全文
posted @ 2015-07-06 23:08 雨尘之林 阅读(560) 评论(0) 推荐(0) 编辑
摘要: Description赫萝最喜欢吃蜂蜜腌渍的桃子。然而她能够得到的桃子有限,因此赫萝必须精打细算。赫萝在b天内可以得到a个桃子,每天赫萝至少吃一个桃子,她想知道她在a天内有多少种吃桃子的方法。吃桃子的顺序并不重要,也就是说赫萝认为“第一天吃一个桃子第二天吃两个桃子”和“第一天吃两个桃子第二天吃一个桃... 阅读全文
posted @ 2015-06-10 23:32 雨尘之林 阅读(557) 评论(0) 推荐(0) 编辑
摘要: Description丁姐和二哥一样养了很多猴子,每只猴子脖子上都挂着一个数字号码牌(数字可能重复但是不重要),一天他和这些猴子完游戏。一开始时有n只猴子围成一圈,猴子的号码牌按顺序为1~n。从当前猴子开始1~k报数,报到k后可能由两种操作:①报到k的猴子从圈中出去,由刚刚退出的猴子的下一只猴子再开... 阅读全文
posted @ 2015-06-10 22:16 雨尘之林 阅读(504) 评论(0) 推荐(0) 编辑
摘要: 1371. 期末打分Description马上要到期末,助教们准备开始打分,然而毕设DDL要到了,助教只好请丁姐来帮忙。众所周知丁姐大一就把毕设做完了,这时候肯定空的跟狗一样。翁阿姨让丁姐统计分数落在区间[a,b]内的学生人数,由于学生很多,丁姐很懒,他决定把这个任务交给你。Input Format... 阅读全文
posted @ 2015-06-10 22:12 雨尘之林 阅读(431) 评论(0) 推荐(0) 编辑
摘要: Description给出一个总字符个数大小不超过1,000,000的字典(这个字典的单词顺序不为字典序)和不超过1000个长度不超过1000的前缀,输出字典中匹配该前缀,字典序为K_i的单词在字典中的位置。所有单词都为小写字母。Input Format第一行: 两个整数N,M,分别表示字典中的单词... 阅读全文
posted @ 2015-06-03 11:16 雨尘之林 阅读(835) 评论(0) 推荐(0) 编辑
摘要: Description有一些同学在练习匀速跑,他们起点和速度各不相同,但约定好练习相同的时间。请根据给出的同学的初始位置和速度,计算至少需要多少条跑道才能保证同学之间互相不会相撞。在任何一个时间点两个不同的同学处在相同的位置均视为相撞。Input Format第一行:两个整数N和T。N (1 #in... 阅读全文
posted @ 2015-06-03 10:57 雨尘之林 阅读(615) 评论(0) 推荐(1) 编辑
摘要: Description小M超级喜欢滑雪~~ 滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当小M滑到坡底,便不得不再次走上坡或者等待升降机来载你。小M想知道滑雪场中最长底的滑坡。滑雪场由一个二维数组给出。数组的每个数字代表点距离水平面的相对距离。下面是一个例子1 2 3 4 5... 阅读全文
posted @ 2015-06-03 10:25 雨尘之林 阅读(725) 评论(0) 推荐(0) 编辑
摘要: Description话说二哥当年学习数据结构的时候遇到了那道猴子报数的题目,其实这就是经典的约瑟夫问题。可是当年的二哥还是个毛头小子,只会用模拟的方法,而其他同学却使用了一些令二哥完全摸不到头脑的方法。……二哥一怒之下改了题目……话说当年花果山的猴子要选大王,选举办法如下:所有猴子按1-M编号围坐... 阅读全文
posted @ 2015-05-28 00:04 雨尘之林 阅读(778) 评论(0) 推荐(0) 编辑
摘要: 1034. 二哥的金链Description一个阳光明媚的周末,二哥出去游山玩水,然而粗心的二哥在路上把钱包弄丢了。傍晚时分二哥来到了一家小旅店,他翻便全身的口袋也没翻着多少钱,而他身上唯一值钱的就是一条漂亮的金链。这条金链散发着奇异的光泽,据说戴上它能保佑考试门门不挂,RP++。好心的老板很同情二... 阅读全文
posted @ 2015-05-27 23:33 雨尘之林 阅读(1019) 评论(1) 推荐(0) 编辑
摘要: ---恢复内容开始---1250. BestSubsequenceDescriptionLL有n个妹子,他给妹子们编号排成一排。据说今天天气大好,LL要去春游了,他决定要选定至少F个妹子一起去玩。 为了让妹子们开心,他决定选连续一段的妹子们。然后LL有个特殊的癖好,他喜欢体重比较厉害一些的妹子。那你... 阅读全文
posted @ 2015-05-27 23:29 雨尘之林 阅读(652) 评论(0) 推荐(0) 编辑