随笔分类 -  (杂)比赛题目

摘要:题意:有m个工程,最多可以雇佣n个人,已知概率pij表示完成第i个工程雇佣j个人时,能按时完成的概率,同时,已知完成一个工程的奖金和无法完成时的罚款,还有每一个人的工资,当然,如果参与的工程无法按时完成,则参与的人不需要支付工资。求这m个工程的最大利润,同时求出需要的人数,多种方案时,从小到大输出人数。分析:想了想,应该还是一道DP,当这么想的时候,很快就写出了状态转移方程,不过却被一些细节拌住了,调了N久,WA了n次状态转移方程:dp[i][j]表示到第i个工程,雇佣j个人的最大利润dp[i][j]=max(dp[i-1][j-k]+pik *(reward-k*salary)-(100-p 阅读全文
posted @ 2012-02-11 22:17 枕边梦 阅读(363) 评论(0) 推荐(0)
摘要:哎,一道这样的题就被整成这样,太粗心了题意:已知一个点光源,和N条线段,求在光源照射下,在x轴上有多少个亮的区域分析:先求出投影到x轴上的N个区间,然后就是简单的区间覆盖问题了View Code #include<iostream>#include<algorithm>using namespace std;int xl,yl;struct seg{ int x1,y1,x2,y2; double xx1,xx2;}s[101];bool cmp(seg a,seg b){ return a.xx1<b.xx1;}double max(double a,doubl 阅读全文
posted @ 2012-02-11 21:53 枕边梦 阅读(187) 评论(0) 推荐(0)
摘要:纯模拟题View Code #include <iostream>using namespace std;#define N 35000int arr[N]={0};int lucky[N];void init(){ int i,j,k,n; n = 0; for (i=2;i<N;i++) { if(0 == arr[i]) { lucky[n++] = i; k = i+1; j = 0; while(k<N) { ... 阅读全文
posted @ 2012-02-10 00:59 枕边梦 阅读(253) 评论(0) 推荐(0)
摘要:题意:一种翻转棋游戏,对当前的棋局,问黑子下一步最多能将几个白子翻为黑子,(当前黑子与原先棋盘中的黑子的连线中间的白子会翻成黑子)分析:很简单的搜索题,不过一开始一直WA,实在无语,一直忽略了一种很情况,就是下一个黑子之后,不一定至于棋盘中的一个黑子连成线,也可以是多个,这时候应该将白子数加起来,而不是求最大者,………………hdu3368#include<iostream>#include<algorithm>using namespace std;char g[10][10];int dir[8][2]={{1,0},{-1,0},{0,1},{0,-1},{-1,1 阅读全文
posted @ 2012-02-10 00:47 枕边梦 阅读(218) 评论(0) 推荐(0)
摘要:题意:给你一个包含'H' 'T'的串,问最少要切几刀才能使得切下来的块分别分给2个人去使得2个人得到的H数目相等且T的数目相等。分析:明确了一点之后,这题目就很好做了。就是,至多切俩刀。具体的证明看这里吧http://hi.baidu.com/superlong/blog/item/c7e86b067ca0337703088146.htmlhdu3363#include<iostream>#include<algorithm>#include<string>using namespace std;char str[100005 阅读全文
posted @ 2012-02-10 00:29 枕边梦 阅读(345) 评论(0) 推荐(0)
摘要:题意:给定一个长度为N的数组,全部由{1,2, 3}组成,求将其排列成不降序列的最少移动次数分析:求出每个1,2,3 各自 是数量,count[1],count[2],count[3]; 这样也就知道了排列后各个元素所属的区域;接下来,我们先需要考虑1 和2 俩块区域;交换一次,能够回到自己所属的区域,应该就是最好的交换了,这样我们就优先考虑交换之后俩俩可以回到自己位置的交换for (int i=1;i<=count[1]+count[2];i++){ if (t[i]==3) a[3]++; else if (t[i]==2&&i<=count[1]) a[1]+ 阅读全文
posted @ 2011-10-23 02:31 枕边梦 阅读(204) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4012下面分析转自大牛:http://www.cnblogs.com/ambition/archive/2011/09/08/Paint_on_a_Wall.html题目大意:给出一个2×n的矩阵(n<=8),每次给一个矩形染色,之后的染色覆盖以前的颜色,问到达目标状态需要多少次看到题目数据量想到了要用搜索去做,想了很久才想出搜索方法,搜索题中的极品啊~~因为每一次涂色肯定会有至少一块颜色是最终显示的颜色,所以用状态记录每一块是否是最终显示的颜色,因为只有2×8块,用二进制 阅读全文
posted @ 2011-09-20 19:56 枕边梦 阅读(498) 评论(0) 推荐(0)
摘要:为什么这样就过了,比赛的时候怎么改都WA了,我只不过把条件改得更严格一点,把多余的判断去掉而已;hdu 4046 Panda题意:给你一个字符串,由'w'和 'b' 组成,对该字符串有俩个操作,当输入为0时,询问该区间[a,b] 内有多少个串 为 "wbw";当输入为0时,将下标为k的字符改为输入的字符;注意:这里的a,b,k表示的都是字符串的下标,也就是取值范围为[0,n-1];分析:对这种区间修改或询问的题目,首先想到的就是线段树或者树状数组了,不过还是线段树熟悉一点,我用线段树做的 ,关键还是构造模型,区间内每一个点的值表示的是什么?我 阅读全文
posted @ 2011-09-19 15:13 枕边梦 阅读(368) 评论(0) 推荐(0)
摘要:hdu 4041 Eliminate Witches!题意:去掉题目背景,给你一个串,转化为一棵树,输出先序遍历节点的顺序;分析:整个串由节点名字,'('、')'、',' 组成,遇到一个括号时,当前左括号是当前括号内节点的父节点,括号内用','隔开的是兄弟节点,整体就是一颗树;若要将该串转化为树,再进行一次DFS的话,我想应该会超时吧。所以第一感觉就是用栈模拟整个串来遍历该树,用队列来保存遍历节点的顺序,用数组应该会更快吧,不过不知道大概会有多大,所以就偷一下懒,直接用队列了。队列是用来保存遍历节点的顺序的,而栈保存的是当前遍历到 阅读全文
posted @ 2011-09-19 14:33 枕边梦 阅读(448) 评论(0) 推荐(0)
摘要:hdu 4023 Game题意:Alice还有Bob 轮流在已知的15中俄罗斯方块上放置瓷砖,Alice放置的是垂直的2*1的矩形,Bob放置的是水平的1*2的矩形,Alice 先开始放,最后没位置可以放者输,输出最后的胜者;分析:题目看似博弈,却是一道贪心+模拟(其实我一开始也死命的认为是博弈,而且,因为博弈还没怎么搞过,就直接跳过了,是看了大牛的提示才知道的);有这样十五种俄罗斯方块:很明显,各种方块对俩人而已是有利也有弊的,俩个人都有自己想优先选择放置的方块。(1,2),都是对于自己稳定的(3,4) (5,6) 前者对B最有利,后者对A最有利(7,8),(9,10),前者对B最不利,后者 阅读全文
posted @ 2011-09-15 20:49 枕边梦 阅读(483) 评论(4) 推荐(1)
摘要:原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4016题意:从给出的N个数中,选出K个数进行与运算,求出最小值一看到这题目,哎,就知道暴力是绝对超时的,可是之后,就没之后……………………看了网上的思路,这剪枝太有技巧了,orz思路如下:1.从当前值开始,如果选上剩下的所有,也不能小于已得最优值的话,返回。2.最优值不用等到累积选到k数才更新,而是不断更新,因为与运算结果比原来两个都小,所以这也是一个剪枝。3.预处理,从小到大排序,可想而知,先选小的,得到的最优值更接近于结果,是个强剪枝,没有这个2900ms+,加上600ms+。太强大了原文的链接 阅读全文
posted @ 2011-09-14 22:59 枕边梦 阅读(510) 评论(0) 推荐(0)
摘要:题意:将题目的背景去掉,简单的说,就是每一次对一个区间的所有值都分别做一次求平方根的运算,就是将那个值改为它的平方根的值,每次再询问一段区间内的总和分析:很明显的用线段树来做,不过明显的对线段树还是不熟悉,一开始将每一步update操作都更新到具体的每一个点了,没有任何技巧,直接TLE;很明显,如果每一步都必须更新的具体每一个点的话,就是一个O(n)复杂度的操作了,这个对使用线段树来说,没太大意义了。这题目而言,我们发现,任何一个2^63次方以内的数,开根号都至多开八次,也就是,多次询问操作之后,很多都已经不需要update了,所以,只需要在每一个节点中增加一个域,用来标记该区间是否已经全部更 阅读全文
posted @ 2011-09-14 20:49 枕边梦 阅读(284) 评论(0) 推荐(0)
摘要:hdu 4036 Rolling Hongshu题意:一个sweet potato想要去约会,从起点滚到终点,途经一个mountain,有m个峰顶,第一个峰顶,第m个峰顶分别为起点和终点,忽略摩擦力,在每一个斜坡上分布着bitter potatoes,每经过一个bitter potato,bitter potato就会以一定的初速度追赶sweet potato,问,sweet potato应该以最小多大的初速度滚动,保证不被bitter potato追到,完成约会;分析:根据能量守恒定律,首先,求出sweet potato到达每一个峰顶需要的最小速度,其次,求出sweet potato到达每一 阅读全文
posted @ 2011-09-12 14:50 枕边梦 阅读(383) 评论(0) 推荐(0)