
动态规划——递归实现(记忆化搜索)
文章平均质量分 71
dumeichen
这个作者很懒,什么都没留下…
展开
-
poj 1661 记忆化dp(不是人就下100层)
题意:看到这道题想起了小时候玩的一个游戏不是人就下100层。只不过题目中增加了原创 2014-08-15 21:28:49 · 414 阅读 · 0 评论 -
hdu 3652 数位dp(能被13整除且包含13的数的个数)
题意:给定一个int类型能够保存的整数n,求1~n中能被13整除而且包含13的数字的个数。例如13、2613等。思路:数位dp,模板见hdu3555。这里需要单开一维记录第k位之前的数字除以13的余数。即dfs的m参数。pre参数的意义:0表示之前没有出现过13而且前一位不是1;1表示之前没有出现过13但是前一位为1;2表示之前已经出现过13了。#include #include us原创 2016-05-25 20:12:29 · 695 阅读 · 0 评论 -
hdu 3555 数位dp的dfs写法
题意:给定一个long long类型能够存下的数字n,统计1~n之间含有49的数字的个数;思路:需要记录当前位置,前一位置放了那个数字,当前是否已经包含49,是否有上界这四个信息,也就是dfs的四个参数。dfs(pos,pre,istrue,limit);其实这种做法有点相当于把普通的数位dp的求dp过程和最后总计的过程合二为一了。#include #include using n原创 2016-05-23 19:29:23 · 740 阅读 · 0 评论 -
poj 3252 数位dp(dfs写法) 二进制0出现比1多的数字个数
题意:给定一个区间[n,m],求这个区间内的round数的数量。所谓round数,就是这个数的二进制表示(不含前导零)中0出现的个数不比1出现的个数少。前几个Round数:0,2,4,8,9,10,12。思路:dp。dfs(int k,int hasone,int numone,int limit)这几个参数的意思是:k:当前处理的是第几位hasone:之前是否出现过1numone原创 2016-05-25 09:21:10 · 751 阅读 · 0 评论 -
zoj 3537 凸包+三角剖分dp(切蛋糕)
题意:给出一些点表示多边形蛋糕的顶点的位置(如果蛋糕是凹多边形就不能切),切蛋糕时每次只能在顶点和顶点间切,每一次切蛋糕都有相应的代价,给出代价的公式为:cost(i, j) = |xi + xj| * |yi + yj| % p(其中p为输入里给定的一个常数)。问把蛋糕三角剖分的最小代价是多少?思路:首先判断多边形是凸的非常容易,只要求一遍凸包看看凸包的点数和给定的点数是不是一样多即可原创 2015-11-03 20:49:01 · 542 阅读 · 0 评论 -
poj 3160/3249 强连通分量+dp(SPFA)(正的评价值才发礼物)
题意:某人要去给n个人送礼,每个人在不同的地方,且他们之间共有m条单向边。另外每个人会提供一个舒心值(也即点权)。现此人任选某个人开始,可以沿单向边访问下一个人。对每个节点可以选择给他礼物并获得相应舒心值或者什么也不做(其中没给过礼物的点可以访问多次,但给过礼物的点只能访问一次),求他能获得的最大舒心值。思路:首先可以证明在一个强连通分量中可以获得所有正的权值并舍弃所有负的权值。然后通过缩点形原创 2015-03-05 12:47:28 · 407 阅读 · 0 评论 -
poj 3181 dp+高精度(数字拆分)
题意:给定两个数n和k,问将n用1到k这k个数字进行拆分,有多少种拆分方法。例如:n=5,k=3 则有n=3+2,n=3+1+1,n=2+1+1+1,n=2+2+1,n=1+1+1+1+1共5种拆分方法思路:dp[i][j]表示数字n的拆分序列中最大的数字为 j 的拆分方法。那么每次求dp[i][j]的时候对序列中有几个j进行枚举即可。此题需要注意的是高精度的处理,用long long不够存,原创 2015-09-07 12:28:58 · 474 阅读 · 0 评论 -
poj 1745 dp(一组数任意加减能否整除k)
题意:给出n个数,问在这n个数中任意添加+,-号,能否得出一个数整除k。思路:动态规划。dp[i][j]表示前i个数的组合能否整除j。由于最后只需要知道dp[n-1][0](元素从0~n-1)的值,所以用递归形式的dp。#include #include #define N 10005int n,k;int s[N],dp[N][205];int solve(int x,int原创 2015-02-01 19:09:00 · 516 阅读 · 0 评论 -
poj 2404 floyd+状态压缩(中国邮递员问题)
题意:经典中国邮递员问题。原创 2014-09-26 19:46:28 · 1694 阅读 · 1 评论 -
poj 1191 dp(记忆化搜索)
题意:中文题。给定一个8*8的64个格子,每个格子里有数字。要求将这个正方形切成n个长方形,使得各个长方形中数字之和的方差最小。思路:dp,记忆化搜索。注意将方差公式写成每项平方的平均数减去平均数的平方的形式。后面一项是常数,所以只需要将前面一项最小化即可。dp(a,b,c,d,m)表示将左上角为(a,b),右下角为(c,d)组成的长方形分成m块的最优值。此外还要能给定左上角点和右下角点快原创 2015-12-02 08:46:22 · 365 阅读 · 0 评论