HDU
lulipeng_cpp
计算机迷
展开
-
HDU2062
记录撰写以及调试HDU2062相关代码的感悟。 首先,明确下解题思路。 显然,这题不能记录An所有的子序列。当n=20时,子序列个数超过10亿级别啦。 如下解释来自网络:(修改了一点) A2={1,2},子序列为:{1} {1,2} {2} {2,1}原创 2012-02-10 21:00:53 · 2115 阅读 · 0 评论 -
HDU1035 四方向dfs
这是我在HDU上解决的第一道独立完成的dfs,故此一记!这题WA了两次:1、在写dfs()函数时将递归出口写成了if(r==0 || r==10 || c==0 || c==10)。试想怎么可能是10呢?要根据输入的行列来确定出口哇!2、把记录遍历点的node ppp[50]开成50,试想行列最大都为10,那么走过的点很可能会超过50呀!那么回溯是就会出错啦!详见代码注释:原创 2012-04-30 22:05:43 · 1924 阅读 · 0 评论 -
HDU1128 self number("优化"版暴力)
这题还是想了很长时间的! 刚开始的思路就是简单暴力,可是却TLE了!为啥呢?简单原因:举个例子来说明。把132当做generator来计算其的“后代”,要算多少下呢?这个问题将是 可否解决问题的关键。两种方式:①从132开始一直运算到“后代”是小于1000000的最大整数为止。模拟几个数:132、138、150、156、168......。这个算 发会超时,原原创 2012-04-20 23:33:44 · 983 阅读 · 0 评论 -
HDU1238 最长公共子序列
这题是个搜索题。主要思想就是:首先,找到输入字符串中最短的串;然后,枚举其子串和子串的反串。这里求子串要从长度最大到最小, 因为要求的是最大子串。最后,判断枚举的子串是否是公共子串。若是,输出其长度,并结束;反之,继续求解。 在做题过程中遇到的问题就是,把bool flag1=false,flag2=false写到了for原创 2012-05-07 16:14:37 · 2083 阅读 · 0 评论 -
HDU1072 nightmare
这题不同于其他题的地方就是于虽然也是bfs,但对于走过的路径不能标记,因为可能还要走,注意题目要求:如果可以,可以走任意多遍。 这就引发了一个问题,如果不缩减搜索范围,怎么可能走得出来呢?应该说这题好就好在不是根据走过的路径来标记,而是根据前后两次踏 上同一位置是bomb离explode的时间原创 2012-05-08 08:53:04 · 2756 阅读 · 0 评论 -
HDU2639 01背包 第K优决策
初学背包。以下内容,来源网络,整理以作学习资料。 求第K优解对于求次优解、第K优解类的问题,如果相应的最优解问题能写出状态转移方程、用动态规划解决,那么求次优解往往可以相同的复杂度解决,第K优解则比求最优解的复杂度上多一个系数K。其基本思想是将每个状态都表示成有序队列,将状态转移方程中的max/min转化成有序队列的合并。这里仍然以01背包为例讲解一下。首先看01背包求最优解的状态转移原创 2012-05-20 16:20:27 · 5387 阅读 · 0 评论 -
HDU3127 完全背包 枚举所有小矩形
这题可以可以看做完全背包问题来接。因为:1、每种矩形布可以剪任意多个;2、题目给出的矩形布可以看做背包容量;3、每个矩形布都有一个价值关键在于找到状态转移方程:设dp[i][j]为长为i宽为j的矩形布的最大价值,下面的图一可以看做待剪的布,图二为小布的尺寸对于这个问题可以两种如下剪布方案: 易知剪布后的价值为每个图形中三块之和。所以,对于方法一可得dp[i][j]=原创 2012-05-21 15:33:09 · 2935 阅读 · 0 评论 -
HDU2552 推公式||用公式
首先,看到这道题千万不要被那个atan(x)的公式吓倒,根本用不着!两种思路来做:第一:推导公式,过程如下:1.tan(a+b) = ( tan(a) + tan(b) ) / (1 – tan(a) * tan(b) )2.tan( atan(x) ) = xarctan(1/s) = arctan(1/u)+arctan(1/v)所以得1/s = tan( arctan原创 2012-05-22 09:57:06 · 1210 阅读 · 0 评论 -
HDU1114
这题是完全背包问题。看过背包九讲,再搜了下网上大牛们的代码,才有一点小懂! 主要是想贴上的我的四个AC代码,看看对函数的不同处理对运行时间的影响: ①#includeusing namespace std;#define INF 0x7fffffffint empty,full,n_case;int record[10000];stru原创 2012-03-03 13:33:59 · 2457 阅读 · 6 评论 -
HDU 1029 出现次数最多(不解)
我对这道题表示不解!明明题目没有什么限制条件,居然用以下第一种代码也过了。 代码一:(虽过了,但个人觉得是错误答案!)#includeusing namespace std;int a[32768];int main(){ int i,tem,n; while(cin>>n) { memset(a,0,sizeof(a))原创 2012-04-17 14:10:19 · 3505 阅读 · 5 评论 -
HDU1248 1407 for循环暴力
这两题解题思想相同,贴在这做个对照。 都是三重for自动计算。 1248寒冰王座/*给小费最少,买东西花费最多即可*/#includeusing namespace std;int main(){ int t,n; int a,b,c; cin>>t; while(t--) { cin>>n;原创 2012-04-26 16:53:49 · 1971 阅读 · 0 评论 -
HDU1205 吃糖果
这题通过率不是很高,所以把自己的代码贴在这,供大家交流!我的解题思路:总共n种糖果,每种a[i]个。那么可以这样解决问题。如果某种糖果个数越多则先吃。比如5种糖果,个数如下5 1 1 1 1。如果先吃个数为1的糖果,那么个数为5的那种糖果肯定吃不完;如果先吃个数为5的那种糖果,那么将能够吃完。(个人理解,无法确切证明!!!)代码大概:①用堆排序按每种糖果个数减排序排列a[n]。②函数j原创 2012-04-26 13:07:19 · 1805 阅读 · 0 评论 -
HDU2072
这题WA了多次。 主要有四方面的问题:①题目说每篇小文章占一行,也就是说每篇文章的字符总数不大于80。(猜想:控制台每行为80个字符长度,之前也有类似一题, 也是采取80个字符长度,AC了。)②测试数据,应该说每次都会在测试数据上出点问题,花的时间最多的也是调试程序。编写程序之前应该考虑程序对边界数据的处理! ③题目说:遇到“#"输入结束是指输入”#“之后,程序原创 2012-02-18 12:01:02 · 4543 阅读 · 3 评论 -
HDU1006
这题是我在HDU上第二次遇到的关于钟表的问题,都很坑人! 首先,我想大家都会在理解上出问题。其实吧,我觉得这题HDU的思想有问题,钟表是一秒一秒走的,哪有连续时间,表示不解!但题目要求,木有办法了。其次呢,结果要求保留三位有效数字。这也就直接导致了:如果离散的来记录满足条件的时间的话,会在精度上出错! 现在,来分析下我对这题的做法吧。题目要求一天(24小时)原创 2012-03-05 14:13:47 · 7221 阅读 · 6 评论 -
HDU4144 TLE
这题算是一道比较简单的了! 关键点: ①输入的字符串中每5个字符表示一个加密前的字符。 ②每个加密前的字符用5位二进制码代替。 ③输入的字符串中字母表示对应位的二进制码为0,数字表示对应位的二进制码为1。 额,可是很纠结的是我的原创 2012-03-09 12:11:37 · 863 阅读 · 0 评论 -
HDU1028 母函数
这是母函数比较简单的一题,贴下作为模板吧!#includeusing namespace std;#define N 121int main(){ unsigned long a[N],b[N]; int i,j,k; int n; while(cin>>n) { memset(a,0,sizeof(a));原创 2012-03-06 22:59:42 · 1981 阅读 · 0 评论 -
HDU1088 字符串
前前后后在HD上做了不少有关字符串处理的题目了。1088要算是另一朵奇葩。写写心得,贴下代码。 首先,要解决的是数据如何输入的问题。测试实例只有一组,很大的一组吆。包括字母,数字,标点符号和空格。其中和具有特殊意义,并且每行最多输出 80个字符也是要注意的。那么,用什么方式来输入数据呢?理论上讲,cin,gets(),getline()等都应该是可以的。我就是先用了原创 2012-04-06 16:52:40 · 2249 阅读 · 0 评论 -
HDU1042 N! 万进制
表示刚开始了无思路!后来看了下讨论,发现了"万进制"。觉得奇妙,记下吧。 这题也让我有了点想法。我们经常用的进制就是2进制、8进制、10进制和16进制。何来“万进制”?世上本无,有人喊了也就有了。呵呵 现在来谈谈自己对进制的一点不成熟的想法。计算机能“识别”0和1,人能识别0、1、2、3、4、5、6、7、8、9以及其多位组合。那么, 为啥就单单有2、8、1原创 2012-04-08 14:34:25 · 6139 阅读 · 3 评论 -
HDU1202 无语题
这一题WA了8次。再看讨论时,骂声一片!个人也觉得这题出的不好。贴在这,供后来者借鉴。 #include#includeusing namespace std;double judge_score(int tem) //分数对应的点数,题目给出的只是整数,所以调用时要强制类型转化{ if(tem>=90 && tem<=100) return 4.0;原创 2012-04-24 23:32:59 · 1828 阅读 · 0 评论 -
HDU 1425 1280 3785 前m大数
这三题都是查找前m大数。所以,贴在一起,有个比较。 1425和1280的主要思想是一样的:空间换时间。但并不是每一道排序题都可以这样做,有条件限制才可以,什么条件呢?1425的条件是:每个整数范围[-500000, 500000]。1280的条件是:每个正整数不大于5000,所以两数相加范围为[2,10000]。这样就可以用一个辅助数组来记原创 2012-04-13 23:47:40 · 2116 阅读 · 0 评论 -
HDU2054
这题着实说的不清楚,WA了n次!!! 题目主要考察对字符串的操作,也就是说输入的数可以是很长很长的字符串。 题目也就不再分析了,网上有很多代码。我这里给出一组数据,如果测试正确,AC应该没有问题。 测试数据: 0 -0 0 +0 123.123 +00123.12300原创 2012-02-12 21:44:08 · 2462 阅读 · 0 评论 -
HDU3732 "假的01背包"
这题乍一看来是01背包问题,其实不然。因为直接01背包的话会超时,O(VN)=O(1000*100000)!!!仔细看题你会发现:每组的0rem[v][c]记录的是价值为v,难度为c的单词出现的次数。又由于总难度是一定的,所以每类单词被选的次数是有上限的,所以该题就可以化为多重背包来做了! AC代码:#includeusing namespace std;int d原创 2012-05-21 23:45:10 · 1161 阅读 · 1 评论