2013年3月26日
摘要: 1. 最长上升子序列HDU1257 最长上升子序列题目:http://acm.hdu.edu.cn/showproblem.php?pid=1257算法: 设dp[i]表示长度为i的序列的最后一个数字,dp[0] = 0,对于num[j],我们可以枚举dp[j-1..1]比其小的数字,假设dp[k] 比其小,那么我们就num[k] 更新dp[k+1], dp[k+1] = num[k]同时可知,dp[i]是单调递增的序列. 所以求最长上升子序列有o(N*N) 和 O( n logn )两种算法代码1: O(N*N)View Code #include <stdio.h>#inclu 阅读全文
posted @ 2013-03-26 16:08 luckyboy1991 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 1. 序列问题题意: 给定一个序列,若y = x * P, 则称这两个元素是互斥的,求一个任意两元素皆不互斥的最长序列元素个数。算法: 对每一个数,可选择要与不要, 然后衡量要与不要的代价,然后做出选择。代码:View Code #include <stdlib.h>#include <string.h>#include <algorithm>#include <map>using namespace std;int a[100100];int N,P;long long maxn;map<int,int>mp;map<int, 阅读全文
posted @ 2013-03-26 15:38 luckyboy1991 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 树状数组专题1、树状数组区间求和,单点更新2、树状数组区间更新,单点求值3、树状数组求最值1)HDU4521 小明序列地址:http://acm.hdu.edu.cn/showproblem.php?pid=4521题意:求给定序列中,求一个最长的序列元素个数,这个最长序列任意相邻的元素下标满足j - i > d算法: 首先这题数据量比较大,O(N^2)的算法肯定无法过,所以时间复杂度应该是O(NlogN)左右。所以需要数据结构来辅助, 线段树,或者树状数组如果不加任何条件,此题应该是求最长上升子序列的~~加了条件后,我们依然设dp[i]为以i结尾的数并且能满足条件的最长序列,用树状数组 阅读全文
posted @ 2013-03-26 15:15 luckyboy1991 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 一、 01背包1.题目1) HDU 4526地址:http://acm.hdu.edu.cn/showproblem.php?pid=4526题意:N个人要在S分钟内乘K俩车到达比赛现场,每辆车Ki分钟到达,剩余Zi个座位,不管几个人上一辆车,费用都是D,对每一辆车可选择做还是不做,不做产生等待费用,等待费用是时间乘以人数,问最后在所有人能到达比赛现场的情况下,话费最少的钱是多少?解法:对第i俩车,可选择做还是不做,dp[i][j] 表示前i辆车做了j人所需要的最小费用,典型的01背包问题。dp方程:dp[i][j] = min(dp[i-1][j] + (ptime[i] - ptime[i 阅读全文
posted @ 2013-03-26 14:45 luckyboy1991 阅读(157) 评论(0) 推荐(0) 编辑