挑战程序设计竞赛~
文章平均质量分 57
liujc_
这个作者很懒,什么都没留下…
展开
-
挑战程序设计竞赛 多重部分和问题
就类似完全背包。。不过要恰好等于背包容量。。就是给n种数ai,各mi个,判断是否能从这些数字中选出若干个使他们的和为v。用dp求解,dp[i+1][j]表示前i种数字能否加和得到j。dp[i+1][j] 只要dp[i][j-k*ai]有一个为真那么就为真。(0代码:#include #include #include #include using namespace std原创 2015-04-22 20:22:57 · 489 阅读 · 0 评论 -
poj 3320 尺取法
链接:http://poj.org/problem?id=3320 还是运用尺取法的思路。 思路: 将头往前走,如果这个知识点没有出现过,将已有的知识点数量+1。如果覆盖了所有知识点,更新当前的最少页数。此时在判断尾巴出现的知识点是否出现超过一次,如果超过一次,那么就将尾巴往前移。因为如果没有超过一次也往前移的话,那么知识点就会少一个,导致之后头要往前移才有可能再次覆盖所有知识点,才可能再次更原创 2015-08-06 21:19:22 · 442 阅读 · 0 评论 -
poj 3061 尺取法
链接:http://poj.org/problem?id=3061 尺取法学习: 将头一直往前去,知道满足条件为止,然后将尾巴往前移动一位。循环这个操作,直到不能再满足条件了。 思路: 记录头和尾的下标,再记录总和。 1)将头的下标一直往前移动,直到满足总和>=S,或者超出序列,如果满足总和>=S,更新连续的最短长度。否则结束操作 2)总和减掉末尾元素,同时将尾往前移动。 循环1) 2原创 2015-08-06 20:42:08 · 402 阅读 · 0 评论 -
poj 2456 最大化最小值
链接:http://poj.org/problem?id=2456 最大化最小值问题,类似的还有最小化最大值,最大化平均值。比较经典的问题。 思路:二分枚举这个最小值,构造一个贪心法,判断将当前这个假定的最小值是否可以作为最小值,也就是判断是否能够使任意两头牛之间的距离都不小于这个最小值。如果是,意味着可以作为最小值,将其变大再判断,不可以将其变小。 感觉这种题的关键在于怎么构造那个判断函数,原创 2015-08-05 16:30:59 · 976 阅读 · 0 评论 -
poj 1064 二分
挑战p140 链接:http://poj.org/problem?id=1064 这题不难,二分很容易想到,就是精度感觉好难受··· 一直WA 思路:二分枚举最长的长度,判断当前的这个假定的长度是否可以切割出k条绳子。如果可以说明可以将这个长度在变长点,如果不行,将其变小再试。 要小心的就是最后区间左右端的选择。个人觉得如果可行将mid付给low,low 应该是表示可以割出的,最后应该输出l原创 2015-08-05 15:53:55 · 474 阅读 · 0 评论 -
poj 3111 最大化平均值
链接:http://poj.org/problem?id=3111 题意:给一堆物品,给出价值和重量,要求从中选出k个物品使得单位重量的价值最大。∑上标下标\sum_{下标}^{上标} 思路:一开始想是不是贪心,按单位价值从大到小排序,后来发现不是。还是要采用二分法枚举单位价值,从而进行判断当前的假定值是否能用所给的这些物品满足。假定当前单位价值是x,也就是判断∑vi\sum vi / ∑wi\原创 2015-08-05 16:48:49 · 394 阅读 · 0 评论 -
课后习题 poj 2376 区间贪心
链接:http://poj.org/problem?id=2376 题意:每头牛给出对应打扫卫生的时间区间,要保证每个时间点都有牛打扫,并且求出这样所需要的最少的牛的数量。不能保证就输出-1. 典型的区间贪心,水水来找点信心orz 思路:每头牛的起点升序排列,如果第一头牛的起点不是1,直接不可能。对于每个确定要使用的牛,从下一头开始找,找出区间有重合(此处要小心),并且终点最远的那个,然后确定原创 2015-08-10 15:25:15 · 553 阅读 · 0 评论 -
挑战程序设计竞赛 poj 2431 优先队列
链接:http://poj.org/problem?id=2431感觉这个思路还是很巧妙的。。。经过每一个加油站的时候你无法知道这时候加油能不能保证得到的是符合题意的最优解,所以就需要换一个角度来思考,因为在加油站时无法判断,那么干脆就直接走到没油,回过头来判断走过的加油站里哪里需要加油,这里就比较容易想到肯定是尽可能的选择能加油最多的点进行加油,这样才能够保证最少的点。这样就可以看出需要运用原创 2015-05-12 12:50:22 · 625 阅读 · 0 评论 -
堆的实现~
挑战p72自己总结了一下,并实现了下,原理等都写在注释之中了。代码:#include #include #include #include #include using namespace std;#define M 1009int heap[M];/*堆最重要的特征在于儿子的值一定不小于父亲的值,可以相等的。*/int num;/*push的原理:将所要插原创 2015-05-11 21:13:16 · 352 阅读 · 0 评论 -
最长上升子序列 nlogn poj 2533
链接:http://poj.org/problem?id=2533定义dp[i] 为长度i+1的上升子序列中末尾元素的最小值从前往后遍历整个序列,对于每个aj如果i = 0或dp[i-1]代码:#include #include #include #include using namespace std;#define M 1009#define INF 0x3f3f3原创 2015-04-23 16:11:29 · 447 阅读 · 0 评论 -
hdu 1159 最长公共子序列
链接http://acm.hdu.edu.cn/showproblem.php?pid=1159基础dp,挑战上的题目。主要在于体会如何找到状态转移方程,dp的思想我现在理解来看觉得是在于怎么将一个大的问题分解成多个子问题求解,找到子问题的最优解,在比较几个子问题的最优解从而得出当前问题的最优解。然而又可以将每个子问题像这样的方式分下去,找到最优子结构。一直分解问题直到最开始的边界情况,也原创 2015-04-22 18:08:36 · 507 阅读 · 0 评论 -
hdu 1257 最长上升子序列问题
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257dp[i]表示以i结尾的最长上升子序列的长度转移方程dp[i] = max(dp[i],dp[j]+1)代码:#include #include #include #include using namespace std;#define M 100009#define IN原创 2015-04-22 21:18:37 · 415 阅读 · 0 评论 -
01背包 背包容量大时新解
01背包在之前都做过,但是好像从来没有考虑过如果背包容量超级大的时候怎么办这个问题。。。因为01背包的时间复杂度是O(n*V) V为背包容量。挑战上的这题就给了个V的范围在1~10^9,这如果按照以前的方法做想必估计就会妥妥的超时了,然而这道题给了一个很方便的地方就是物品的个数与每个物品的价值都不大,所以这里可以转换一个思路,转变为求前i个物品中价值为j时最小的重量。这样最后找出dp[n]中重量原创 2015-04-22 18:26:34 · 1371 阅读 · 0 评论 -
旅行商问题 TSP问题 状压dp入门 + floyd poj 3311 hdu 5418
旅行商问题 & TSP问题:有n个城市,从起点 0 开始游历每一个城市,只访问每个城市一次,最后回到起点,所需要的最短路径是多少? 这个属于NP完全问题。最直接的方法就是枚举法,解空间为n个元素的所有排列组合,为(n−1)!(n-1)!。n稍微一大就无法在有限的时间内做出。还有一些模拟退火算法什么的,这个不太了解,有空再去了解下。 在acm中,对于此问题,n一般都不大,可以运用floyd + 状原创 2015-09-11 15:35:01 · 3758 阅读 · 5 评论