- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 HDU 1024
http://acm.hdu.edu.cn/showproblem.php?pid=1024这题可以这样来想:以dp[i][j]来表示前i个数字构成j段的最大和,则dp[i][j] = max(dp[i-1][j],max(dp[t][j-1])),其中0但是这样写空间复杂度和时间复杂度都太高了。继续往下想:如果第i个数字加入前一段的话,就只与前一个数字的状态有关,则可以用一维的动态数组来
2013-05-29 10:40:20 544
原创 HDU 3652
http://acm.hdu.edu.cn/showproblem.php?pid=3652数位DP,用了4维来记录,dp[vis][fg][k][index],维数分别表示前面是否有13,上一位数是否为1,当前的余数,位数深度。#include #include #include #include #include #include #include #include usi
2013-05-27 11:00:48 424
原创 HDU 3709
http://acm.hdu.edu.cn/showproblem.php?pid=3709这题也是个数位DP,我的数位DP都是写成的记忆化搜索的形式,个人觉得这样要好理解点。这题与其他数位DP的差别就是要枚举每一个点作为支点的情况,然后最后还要减掉重复计算的为0的情况。#include #include #include #include #include #include
2013-05-27 10:56:02 467
原创 HDU 3555
http://acm.hdu.edu.cn/showproblem.php?pid=3555数位DP,三维记录,dp[vis][fg][index],vis表示前面是否出现过49,fg表示前一位数是否为4,index为数字剩余长度。结果用__int64保存。#include #include #include #include #include #include #
2013-05-25 09:55:59 372
原创 HDU 2089
http://acm.hdu.edu.cn/showproblem.php?pid=2089这是个简单的数位DP,具体看代码吧、#include #include #include #include #include #include #include #include using namespace std;#define mod 1000000007#define ll
2013-05-25 09:11:30 402
转载 学计算机的你伤不起啊(转)
学计算机的你伤不起啊!!!!!! 老子六年前开始学计算机啊!!!!!!于是踏上了尼玛不归路啊!!!!!!谁特么跟老子讲计算机是王道专业啊!!!!!! 尼玛路边乞丐都是程序员!!!!!!会打代码的一大把啊 有木有!!!!!!!!! 谁再跟老子讲计算机是王道专业 老子一个键盘盖死你啊,一个鼠标线勒死你啊!!!! 尼玛一上大学就找不到女朋友!!!!!!班上男女
2013-05-23 12:58:29 561
原创 HDU 1978
http://acm.hdu.edu.cn/showproblem.php?pid=1978这题是简单的记忆化搜索 , 用dp[i][j] 表示当前点到终点的方法数,注意要结果要对10000取余就行了。#include #include #include #include #include #include #include #include #include
2013-05-23 12:49:40 498
原创 HDU 1058
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1058这题n到5000+,未来避免重复计算,可以先打个表,用a,b,c,d分别记录当前2,3,5,7乘到的位置,并且用一个map来标记乘出来的数是否出现过。如果出现过,则不放入表中。还有就是要注意输出的时候n的最后2位为11,12,13的时候输出后缀为th。#include #in
2013-05-22 23:14:00 436
原创 HDU 2830
水题一个,想法和HDU 1505类似。#include #include #include #include #include #include #include #include #include using namespace std;#define ll long long#define int64 __int64#define M 1005int dp[M][M
2013-05-22 20:54:59 429
原创 HDU 2870
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2870这题若先把w,x,y,z都转换成对应的字符(a,b,c)中的一种,则可转换成求由相同字符构成的最大矩阵,后面的做法就和和HDU 1505这题类似了。h[i][j]表示以在某一行以第i列为底以第j种字符的最大高度。以此高度向左右分别扩散,找到高度大于等于当前高度的左边界lef[i]和右边界rig
2013-05-21 15:00:45 447
原创 HDU 1421
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1421题目分析可知:要获得最小的疲劳度,每次拿物品必然是拿重量最相近的两个物品,所以输入数据之后先排个序。状态转移方程为:dp[i][j] = min(dp[i-1][j],dp[i-2][j-1]+weight),dp[i][j]表示前i个物品选出j对的最小疲劳度,dp初值赋为最大值,
2013-05-21 09:44:51 391
原创 poj 2828
点击打开链接这题最开始想了很久也不知道如何处理,看了大神的思路才知道用线段树处理,先建立一个空树,每个节点记录当前区间的空位的个数,然后对输入的数据从后往前插入,而pos的值也就相当于插入的点前面有多少个空位,详细看代码。#include #include #include #include #include #include #include #include #includ
2013-05-20 10:46:24 399
原创 HDU 2795
http://acm.hdu.edu.cn/showproblem.php?pid=2795这题由于最多能用到的行数是min(h,n),所以每次就以min(h,n)来建立线段树,树的节点中存放当前区间内所有行中所用长度的最小值,每次更新和查询都要更新到叶子节点,所以我就把更新和查询写到了一个函数里面。以下为代码:#include #include #include #include
2013-05-19 10:16:45 424
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人