上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 18 下一页
2013年6月9日

uva620 - Cellular Structure(....)

摘要: 这道题跟动规没一毛钱的关系啊,我实在找不到状态转移,找不到记忆化搜索。。。用dfs写的代码。。。跑了19ms代码如下:#include #include #define N 105 char s[N]; char ans[4][20] = {"MUTANT","SIMPLE","FULLY-GROWN","MUTAGENIC"}; int dfs(int a, int b) { if(s[a]=='A'&&a==b-1) return 1; if(s[b-2]=='A' 阅读全文
posted @ 2013-06-09 21:01 Primo... 阅读(114) 评论(0) 推荐(0)
2013年5月31日

uva10003 - Cutting Sticks(简单动规)

摘要: 第一道动规题目,昨天看的题目,今天才做出来,,昨天理解错题意了,题目说的是绝对切割长度,而不是相对的,请注意。。。思路:对切割顺序进行枚举,对于需要切割的长度【25,50,75】则寻找第一次切割的位置。所以对位置25,50,75各来一次。其实这样还是暴力,只不过表格记录了已经计算过的状态,省时一些罢了。这里我用的是从底向上递推来填表的注意这里的小技巧:对于【25,50,75】来说。存的时候把0和100也要存进去。【0,25,50,75,100】状态方程:f[m][n]= min{f[m][k]+f[k][n]+a[n]-a[m];}(m #define N 55 #define INF 0xf 阅读全文
posted @ 2013-05-31 21:16 Primo... 阅读(122) 评论(0) 推荐(0)
2013年5月30日

uva10570 - Meeting with Aliens(会见外星人)

摘要: 看到这类型的题目,yi点点思路都没有,,自己琢磨了半个钟头果断的搜解题报告。。思路:最终要的结果肯定是从某个位置开始1,2,4,5,6,7...n,或者是n,n-1,n-2,n-3.......2,1。。。我们只要对开始位置暴力一遍即可,而每次确定开始位置后还要记得分正序和反序两种情况。对于每种情况求其交换次数即可。。。最终答案要的也是最小的交换次数。。。求交换次数的时候用了贪心的思想。如果是正序的话,则直接把1放到开始位置,2放到第二的个位置。。。。【注意,这个题不必相邻的两个位置交换,,,而是任意两个位置都可以交换】代码如下:#include #include #define N 10.. 阅读全文
posted @ 2013-05-30 20:57 Primo... 阅读(545) 评论(0) 推荐(0)
2013年5月27日

uva11176 - Winning Streak(连续获胜)

摘要: 看到这个题,我开始的时候还真的想到用递推来做。。不过我假设f[i][j]表示前i场比赛连续胜利的场数是j的概率,最终也没找到正确的递推关系。后来看staginner大神的解题报告,,,我彻底服了,,差距就是差距哪。。他用f[i][j]来表示前i场比赛连续获胜场数不超过j的概率。。最后结果便是i*(f[n][i]-f[n][i-1])最精妙的地方是他从反面考虑问题,使得问题难度大大降低。如果我么开始的时候把每个事件的初始值设为1.每次只要把不符合条件的事件概率减去即可。这个问题恰恰是适合从反面考虑的问题,因为从正面考虑很麻烦,对于第i场比赛是w还是L,只要是第i场比赛的结果不会使得连续胜利场数超 阅读全文
posted @ 2013-05-27 19:37 Primo... 阅读(197) 评论(0) 推荐(0)
2013年5月25日

uva557 - Burger(汉堡)

摘要: 概率计算,,,先计算它的对立事件的概率比较简单。就是最后两个分到的汉堡不一样。那么最后两个肯定是两个不同的。所以这种事件的总数有c(n-2,(n-2)/2)个,开始的时候用总数为c(n,n/2)来计,发现连样例都过不了。。后来用2^(2-n)来乘。得到的概率就行了。。回过去。才认识到自己的错误,这种选择排列在两种汉堡都有剩余的时候才是等概率的。。所以c(n,n/2)中有很多不成立的情况。计算变得简单起来。。f[n] = 2^(2-n)*c(n-2,(n-2)/2);然后推得递归关系: f[n+2] = (n-1)/n*f[n];代码如下:#include #include #define .. 阅读全文
posted @ 2013-05-25 21:06 Primo... 阅读(151) 评论(0) 推荐(0)

uva10169 - Urn-ball Probabilities !(缸和球的概率问题)

摘要: 昏暗周末第一题。。。。题意:两个罐子,A和B;开始的时候A中1球、B中2球,但每个罐子中都有一个红球。每次从两个罐子分别中取出1个球。记录结果然后放回,放回的同时向两个罐子中分别增加1个白球如此反复操作。问n次操作中,至少有1次取出的两个球都是红球的概率。若n次操作每次取出的球都是两个红球的概率小数点候有几个连续的0。思路:记f[i]表示前i次操作中至少有一次操作取出的两个球都是红球的概率, p[i]是第i次取出的两个球都是红球的概率。则可推出一个递归关系: f[i+1] = f[i] + (1-f[i])*p[i]f[1] = 1/2;f[2] = f[1] + (1-f[1])*(1/2) 阅读全文
posted @ 2013-05-25 19:01 Primo... 阅读(258) 评论(0) 推荐(0)
2013年5月24日

uva10369 - Arctic Network(北极网络)

摘要: 最小生成树的变形最小生成树只能有n-1条边。所以我们有无线资源的时候,为了尽量发挥这些昂贵资源的价值,我们把这些资源用到最小生成树的最长的s个边上。即,求最小生成树的第p-s个边#include #include #include #include using namespace std; #define N 500 #define M 200000 int n, m, t, dot[N][2]; int v[M], u[M], r[M], p[M]; double w[M]; void init() { int dx, dy; scanf("%d%d",&t,&a 阅读全文
posted @ 2013-05-24 21:59 Primo... 阅读(171) 评论(0) 推荐(0)

uva10397 - Connect the Campus(连接校园)

摘要: 最小生成树问题,,做这道题做的好艰辛啊,,第一阶段:没看题,看数据是标准的最短路径floyd算法的应用。。结果写出代码样例都过不了第二阶段:看懂题,写kruskal算法,样例只能过一个,两个同样的输入输出的结果不一样。。。第三阶段:解决了同输入不同输出的问题,【问题再次出现在kruskal算法的p数组的初始化上。节点的标号应该是1....n。】,但交上去wa!!!第四阶段:功德圆满,解决了wa问题,终于修成正果,a掉了题目。【擦,问题又出现在了sort上,关于return a-b 和return a #include #include #include using namespace ... 阅读全文
posted @ 2013-05-24 21:00 Primo... 阅读(326) 评论(0) 推荐(0)
2013年5月23日

uva10048 - Audiophobia()

摘要: 在情急之下做的这道题,很快的按照floyd算法写完代码,结果连样例都不能过。。以为自己写的代码的问题,就一直找代码的错误,结果没找到错误就结束了。。。。后来,回头看这道题,,,,才发现自己根本没理解题意,,,这道题是让求从a到b需要忍受的最小噪音,,就是说在多条从a到b的路径中,每条路径都要选出它的最大路段,最后在这些路段中选出最小的即可。然后,对代码来说,,,只需要对floyd算法稍稍改一下就行了。。。代码如下:#include #include using namespace std; #define M 105 #define INF 1000000 int d[M][M]; int.. 阅读全文
posted @ 2013-05-23 22:45 Primo... 阅读(125) 评论(0) 推荐(0)

uva10034 - Freckles(斑点)

摘要: 最小生成树的算法的应用。。。。一个变量的初始化,再次成为我的绊脚石了,,,,wa了三遍。。思路不难,,(1)根据坐标产生边,(2)求解最小生成树。代码如下:#include #include #include using namespace std; #define M 5000 double dot[105][2], w[M]; int n, m, u[M], v[M], p[M], r[M]; void print_edge() { m = 0; double dx, dy; for(int i = 0; i < n; i++) for(int... 阅读全文
posted @ 2013-05-23 21:23 Primo... 阅读(171) 评论(0) 推荐(0)
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 18 下一页