上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 34 下一页
摘要: 题意:还是类似迷宫问题,已知起点和终点,在规定时间内求出到达终点的最少时间。有俩种行走方式1)飞行:除了遇到‘#’ 以外,任何地方都能穿过,但需要消耗1s,同时消耗1 魔法值注意:理论上遇到一个‘@’要消耗俩点魔法值,因为离开这个‘@’ 要消耗2点魔法值2)行走:有俩种情况不能走,1,遇到‘#’;2当前点是‘@’ 或者遇到的点是‘@’View Code #include<iostream>#include<algorithm>#include<queue>using namespace std;char g[100][100];bool vis[88][88 阅读全文
posted @ 2012-02-13 15:10 枕边梦 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 题意:射箭游戏,已知箭头的初始位置是(0,0),速度为v,靶的位置为(x,y),要求算出射中靶心的最小的角度,若不能射中,则输出-1分析:借鉴之前几道三分的思想,很明显的一点是,关于高度h关于角度θ的函数是凸函数,首先三分枚举角度值,求出到达x时的最大高度利用最大高度判断能否射中,若能,则继续二分θ逼近y,最后求出最小的θ当然,此题还存在纯物理公式的解法参考下面的博客http://www.cnblogs.com/newpanderking/archive/2011/08/25/2153590.htmlView Code #include<iostream>#include<a 阅读全文
posted @ 2012-02-13 01:13 枕边梦 阅读(445) 评论(0) 推荐(0) 编辑
摘要: 题意:给出两条平行的线段AB, CD,然后一个人在线段AB的A点出发,走向D点,其中,人在线段AB上的速度为P, 在线段CD上的速度为Q,在其他地方的速度为R,求人从A点到D点的最短时间。分析:居然要用三分,哎,怎么也没想到,先在AB上三分,固定一个点,接着在CD上三分,就是嵌套的三分搜索,思路清晰的话,代码也不是很难敲注意精度还有边界的处理View Code #include<iostream>#include<algorithm>#include<math.h>using namespace std;struct point{ double x,y;}; 阅读全文
posted @ 2012-02-12 21:09 枕边梦 阅读(292) 评论(0) 推荐(0) 编辑
摘要: hdu3756题意:在一个三维空间里,已知有N个点,求一个最小的圆锥使所有的点都包含其中。分析:主要有俩个步骤,首先就是将三维空间转化为二维空间,将所有的点都转化都同一个平面内考虑,通过将(X,Y,Z) 转化为(sqrt(x*x+y*y),Z),问题就转化为求一条直线将第一象限内的点全部包围起来。即,求满足条件的h,r 使得 h*r*r最小对于单调函数的表达式,我们可以采用二分搜索,但对于这种凸函数或凹函数求极值,我们可以采用三分搜索,给定h的上下限,三分h搜索即可。这里有三分搜索的介绍,挺不错的http://www.crazyhotice.com/2011/07/%E4%B8%89%E5%8 阅读全文
posted @ 2012-02-12 16:06 枕边梦 阅读(632) 评论(0) 推荐(0) 编辑
摘要: 很明显的二分搜索,注意一下精度就OK了我所知道的二分有俩种写法,注意一下循环的控制其一#include<iostream>#include<algorithm>#include<math.h>using namespace std;double cal(double x){ return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;}int main(){ double y; int T; scanf("%d",&T); while(T--) { scanf("%lf",&y); if( 阅读全文
posted @ 2012-02-12 02:26 枕边梦 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 某种排序下的01背包,直接01背包肯定是错的,因为题目加了一些限制,需按q-p 从小到大将物品排序,至于为什么还是不清楚View Code #include<iostream>#include<algorithm>using namespace std;int dp[5005];struct good{ int p,q,v;}g[505];bool cmp(good a,good b){ return a.q-a.p<b.q-b.p;}int main(){ int n,m; while(scanf("%d %d",&n,&m) 阅读全文
posted @ 2012-02-12 01:31 枕边梦 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 题意:有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 枕边梦 阅读(352) 评论(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 枕边梦 阅读(177) 评论(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 枕边梦 阅读(242) 评论(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 枕边梦 阅读(202) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 34 下一页