摘要: 这道题题意不想说了,跑了640ms,感觉水过去了,应该能通过单调队列优化,很长时间没碰已经不知道怎么写了,就说说现在的写法吧。 状态定义很关键:dp[i][j]把前j个topic放在前i堂课. 因为这道题中的topic不能跳,必须按顺序,那么我们可以用贪心先求出最少的课程数,凭感觉证明这个贪心的做法是准确的,且找不到反例。 然后根据dp前后状态递推方程: dp[i][j]=max(dp[i... 阅读全文
posted @ 2015-11-01 16:42 acliang 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 1到6的卡分别各有有限制的张数,问能不能恰好分,总张数不能超过20000. 很明显是多重背包问题,上去果写了个三重循环,然后就T了,重新打开背包九讲,找到了多重背包的二进制拆分优化,把其中一维n的复杂度简化为logn的复杂度。 二进制拆分优化:就是1,2,4,2^k(满足和小于分解数最大的k),二进制优化可行的原因,因为可以用二进制数表示任意不同小于等于k的数。 注意:数组不要开小,RE了 ... 阅读全文
posted @ 2015-11-01 16:21 acliang 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 记忆化搜索,因为要求最小的,肯定是从小到大,依次添加,那么通过bfs,队列貌似是最好的选择。因为很可能那个数爆long long,所以采用字符串存储,并记录余数,通过模拟除法的方式来写。 剪枝:因为后面添加的数都是一样的,所以相同的余数后面的过程都是一样的,所以我们需要通过一个数组优化。 注意:string和char数组的相互转写和除数和被除数分别为0的情况。 #include #in... 阅读全文
posted @ 2015-10-28 17:17 acliang 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 给你每个物体两个参数,求最长的链要求第一个参数递增,第二个参数递减,要求输出任意最长路径。 首先第一反应根据第二个参数排个序,然后不就是最长上升子序列的问题吗? O(nlogn)的复杂度,当然这样可以写,写法也不难。 然后发现这个还是个DAG,也可以用拓扑排序来搞定,输出最长路径,复杂度O(n*n),更新的时候需要更新并记录每个点的前节点,最后倒序输出。 第二种就当练练手吧 先上第二种代... 阅读全文
posted @ 2015-10-21 14:35 acliang 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 这是一道记忆化搜索,也就是有记录的搜索。 注意点:一次走k步不能拐弯 int bfs(int x,int y) { int mm=0; if(ans[x][y]>=0) return ans[x][y]; for(int i=0;i #include #include #include #include #include #include #include... 阅读全文
posted @ 2015-10-21 14:25 acliang 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 写到现在,发现1025,1076之前写的都是同一种题型:关于DAG的最长路(最短路)。 首先要建立模型,根据关系,确定点和点之间的关系,构成一个DAG,前面几道题每个点之间距离默认为1,这一道题不同点之间距离不一样.然后进行拓扑(最基本,稳健方法)或者直接贪心乱搞,求出最长路或是最短路。 数据比较弱吧,都是0ms跑完的。 #include #include #include #incl... 阅读全文
posted @ 2015-10-16 22:09 acliang 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 这道和zoj1025一样,本质是贪心算法,首先要求任意最长的序列,我们只要保证最长就行,也就是在一幅图中找一个最长的链,首先我们需要根据y排序(输入为x,y),因为y大的肯定在y小的后面,然后就直接贪心,前面取不到后面就不可能取到那个数,证明了贪心的正确性。 #include #include #include #include #include #include using... 阅读全文
posted @ 2015-10-15 23:56 acliang 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 题目很简单,求一个连续的最大子矩阵的值. zoj上的数据非常弱。 首先爆搜是O(N^4),10^8的复杂度略高,那么我们可以处理一下其中一维的前缀和,降一阶,然后按照连续最大子序列来处理,因为可能为负数,所以基数不能取0. 上代码 #include #include #include #include #include #include using namespace std; in... 阅读全文
posted @ 2015-10-13 22:01 acliang 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 一道动态规划,两个串进行匹配,不同字母匹配的值不一样,也可以和空格匹配(空格不能与空格匹配),求最大的匹配值。 数据很弱,每个串都在100以内。 定义dp[i][j]为第一个串前i个数和第二个串前j个数已匹配的匹配值 有三种情况:1.第i个和第j个匹配 2.第i个和‘-’匹配 3.第j个和‘-’匹配 ... 阅读全文
posted @ 2015-10-12 15:36 acliang 阅读(503) 评论(0) 推荐(0) 编辑
摘要: DAG转移,从切题的数量来看是一道水题,给你n个棒,大的可以延续小的,问最少上升子序列的个数。 其实这道题是用贪心来写的,因为这是个有向无环图,到达分叉口,每一条路都要便历,所以每条路应该一样对待,有两维限制,可以先对其中一维进行排序,然后根据第二维的情况进行处理。for循环:#include#i... 阅读全文
posted @ 2015-09-30 17:40 acliang 阅读(168) 评论(0) 推荐(0) 编辑