LeeBlog

导航

上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 19 下一页

2011年4月25日 #

HDU 1257 最少拦截系统 DP

摘要: 这题是一DP题,开始我听小白的直接暴力,结果测试数据能过,但提交就wa,我哭啊,呜~~~~,我重敲了一次,结果还是悲剧,几个小时啊,我就在这悲剧,最后翻出小晨的代码,发现好简单的,百度上说是最长上升子序列,于是直接1A了,最长上升子序列就是在一个数列a1-an中,从中选取几个数,这个数组成的序列递增,并且是a1到an中这样子序列中最长那一个。这个题其实也符合最长上升子序列,只要后面有一个比前面高的,就要加一个拦截系统(要增加一个拦截系统,首先要知道前面已经有多少涛拦截系统)。//这个能A#include<stdio.h>int n,dis[100000],max,dp[100000 阅读全文

posted @ 2011-04-25 16:13 LeeBlog 阅读(369) 评论(2) 推荐(0) 编辑

2011年4月23日 #

HDU 2571 命运

摘要: 这题很DP就是跟前面一样一步一步来,先找到一部分,然后把这部分扩大,最后至全部,最终找出全局最优解,这里要注意,他给的测试数据太淫荡了,其实|K|>100,所以max初始化时给个1111吧#include<stdio.h>#include<string.h>int n,num[25][1024],m;int main( ){ int t; scanf( "%d",&t ); while( t-- ) { scanf( "%d%d",&n,&m ); memset( num,0,sizeof( num 阅读全文

posted @ 2011-04-23 22:44 LeeBlog 阅读(185) 评论(0) 推荐(0) 编辑

2011年4月22日 #

DP 动态规划小结

摘要: 到今天为止,动态规划入门已经有好几天题也做了几个了,其实这部分题大概都是一个规律:要找到整个问题的最优解,先找到局部的最优解,然后将范围逐渐扩大,最后扩大到全局就可以了,例如HDU 1087 super jumping!先从第一个起,先把第一个的最优解找到,然后往后增加,找到第一个到第二个的最优解,并保存在数组2中然后再增加,找到第一个到第三个的最优解,保存在第3个数组中,然后一直往后推移,一直找到全部的最优解。这其中就存在一个问题,为什么要从前面一个一个找呢?为什么不一次找完呢?那样多省时间?我想说:会用我不用啊!傻啊!你!。有狠不把前面n-1个的最优解找出来,直接找到第一个到第n个的最优解 阅读全文

posted @ 2011-04-22 23:22 LeeBlog 阅读(170) 评论(0) 推荐(0) 编辑

HDU 1003 Max Sum

摘要: 本题跟最大子序列差不多,是姊妹题,其实解决了上个,这个只要解决几个地方就可以了,请注意如果有全部是负数,就把这些负数中最大的输出来。#include<stdio.h>#include<string.h>int t,n,pos,num[110000],add[110024],pri[110024];void cal( ){ int pos = 1; for( int i = 1; i <= n; ++i ) { if( add[i-1] >= 0 && (add[i-1] + num[i] >= 0) )//here { add[i] = 阅读全文

posted @ 2011-04-22 20:38 LeeBlog 阅读(162) 评论(0) 推荐(0) 编辑

HDU 1231 最大连续子序列

摘要: 这题是一郁闷题,开始我想了好久没思路,最后想到前面不是做了几个类似的DP么,只要把前一个的最大子序列找到了,那当前这一个的最大子序列就好办了,因此又是一个从前往后解决的问题,不过要注意最后一组测试数据,我在这里错了好几次#include<stdio.h>#include<string.h>int k,num[10024],add[10024],pri[10024],pos;void cal( ){ int m = 0; for( int i = 1; i <= k; ++i ) { if( (add[i-1] + num[i]) > 0 && 阅读全文

posted @ 2011-04-22 17:12 LeeBlog 阅读(619) 评论(0) 推荐(0) 编辑

2011年4月21日 #

如何产生各种随机数

摘要: 产生int型随机数#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<time.h>int main( ){ //freopen( "1.in","r",stdin ); //freopen( "3.out","w",stdout ); srand( time( NULL ) ); int t,n = 10 ; while( n-- ) { printf 阅读全文

posted @ 2011-04-21 19:34 LeeBlog 阅读(1649) 评论(0) 推荐(0) 编辑

2011年4月20日 #

HDU 1176 免费馅饼

摘要: 这题是一最优子结构的题,我开始暴力,结果一直TLE,最后听小白说这是一最优子问题,极像数塔,怎么像呢。这每一秒不就像极了每一层么,而且是从上往下时间增大的,为什么从下往上呢?因为要只到第一秒选哪个最大,就必须知道第二秒的分布情况,而要知道第二秒选哪个,就必须知道第三秒的情况,同理,可以一直往下推。这样不久像极了一个数塔么,要先解决下面的才知道上面的,而没一层的每一个又跟哪个有关系呢?显然由题意有每个只跟下面的三个有关,而且第0个和最后一个要特殊出理,所以有ch[y][++x]#include<stdio.h>#include<string.h>int n,ch[1000 阅读全文

posted @ 2011-04-20 19:12 LeeBlog 阅读(198) 评论(0) 推荐(0) 编辑

2011年4月18日 #

HDU 1087 Super Jumping! Jumping! Jumping! 简单DP

摘要: 这是一道简单的DP,应该从前面往后面找,结果我一开始用递归,从后面往前面找,悲剧了很久这里的思想是先从第一个开始找到第一个的最优解,然后第二个,第三个。。。。而为什么要一个一个来求呢,那是因为后面的都是通过前面的来找最优解(dis[j] > max && num[j] < num[i] ),最后把全部的最优解都找到,而本题求的是全题的最优解,所以还要找到全局的最优解( Max )。#include<stdio.h>#include<string.h>int n,num[10000],dis[10000];int cal( ){ int Max 阅读全文

posted @ 2011-04-18 16:25 LeeBlog 阅读(174) 评论(0) 推荐(0) 编辑

2011年4月17日 #

HDU 2084 数塔 简单DP

摘要: 这题是一水题,只需从第一层一直往下面找子树中较大的那一个就可以了,很快水了,不过用codeblocks编得郁闷,codeblocks上编译都过不了,直接提交就水了#include<stdio.h>int n,inf = 0x7fffffff,des[10000],num[10000];int cal( int sum,int i,int j ){ if( num[sum + j] == inf ) return 0; if( des[sum + j] ) return num[sum + j]; des[sum + j] = 1; if( j > i ) { sum += i 阅读全文

posted @ 2011-04-17 21:58 LeeBlog 阅读(187) 评论(0) 推荐(0) 编辑

文件

摘要: //freopen ( "1.in", "r", stdin ); //freopen ( "1.out", "w", stdout ); 阅读全文

posted @ 2011-04-17 10:45 LeeBlog 阅读(121) 评论(0) 推荐(0) 编辑

上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 19 下一页