动态规划
文章平均质量分 55
meme_y
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
动态规划+之基础递推+noj三角形
#include#include#includeusing namespace std;int b[105][105],a[105][105];int main(){ int n,i,j; while(~scanf("%d",&n)) { memset(b,0,sizeof(b)); memset(a,0,sizeof(a)); for(i=原创 2013-04-16 20:09:00 · 505 阅读 · 0 评论 -
NOJ37 回文字符串---整理一下都是各种回文类型啊,
点击打开链接注意要是求的字符串和逆串的公共子序列,和公共子串分开了哦。思路分析:1.判断字符串前后俩个字符是否相同,如果相同,则删去这俩字符,判断剩余的字符,不需要添加字符。2.如果不相同,则添加最少的字符的数量 = min((在字符串前添加和末尾一样的字符,删除末尾字符,判断其余字符串),(在字符串后添加和前边一样的字符,删除前边的字符, 判断其余字符串) ) + 1 ;很容原创 2013-04-25 21:06:16 · 584 阅读 · 0 评论 -
Hu 4639 hehe
一开始已经看不下去了,一直一直不懂,对着这道呵呵的题只能说呵呵了。 思路:后面小d讲的思路,一开始递推发现好像是斐波那契数列每一个,每一串中的每一个hehe你可以选择变还是不变,当你变了就是相当是一个i-1;的子串当你没变的时候就 是 一个i-2; 状态方程写下来dp[i]=dp[i-1]+dp[i-2];而当你把所有的情况都乘起来的时候就是结果了。因为长度是10086,he两个字符s原创 2013-08-01 19:23:57 · 606 阅读 · 0 评论 -
NOj 720项目安排
一开始有的唯一思路就是dp[i]是表示i这个项目所给出所有不冲突的和的比较,但是没有想到怎么实现,然后受到飘逸一个劲的折磨之后,思路终于变的很清楚了。思路:dp[i]代表的是第i个项目得到的最大价值,然后转移方程就是dp[i]=max{dp[i-1],dp[j]+value[i]);这个最大价值可以是前i-1的最大价值,或者是第i个项目和前面所有不冲突的项目之和(dp[j])+本身的价值,两者原创 2013-07-24 11:03:21 · 518 阅读 · 0 评论 -
吃土豆
#include #include #include #include #include using namespace std;int dp[510],save[510][510],m,n;int main(){ while(~scanf("%d%d", &n,&m)) { memset(dp, 0, sizeof(dp));原创 2013-07-10 10:35:00 · 443 阅读 · 0 评论 -
记忆化搜素,和递推法
记忆化搜素是动态规划的改进,------自上而下,就是在递归重叠子问题时候,对子问题的重复问题的对策,就是一开始对所有子问题进行赋值(一般为-1)这样的标记方法来区分是否被查找过。 递推----也是动态规划的一种从底而上的方法。原创 2013-07-08 15:57:44 · 535 阅读 · 0 评论 -
还是树形dp 也可以用最短路来写--NOJ679 贪婪的商店
其实也是简单的dp,还可以把价格看成是权值用最短路来写,求出所要买的商品到各点的商品用最短距离;这个和376其实是一样的思路就是用深搜的。点击打开链接#include #include #include #include #include using namespace std;int dp[1005],flag[1005],cost[1005];vecto原创 2013-04-29 16:48:16 · 521 阅读 · 0 评论 -
简单的树形dp NOJ376 小强的Linux
树形dp是建立的树的基础上的有二叉和三叉等等树,现在学到的知识很简单的树形dp,但还是要注意深搜时要标记避免已经搜素得到过的结果可以直接用了不用在浪费时间去搜素了。还有就是对根节点的处理。点击打开链接#include #include #include #include #include using namespace std;int dp[1005],flag[1原创 2013-04-29 16:26:16 · 502 阅读 · 0 评论 -
HDU OJ 2830 Matrix Swapping II 【动态规划】
#include #include #include using namespace std;bool cmp( int x, int y){ return x>y;}int main(){ int n, m, sum[1005], dp[1005]; while(~scanf("%d%d", &n, &m)) {原创 2013-04-19 18:18:27 · 413 阅读 · 0 评论 -
noj +422字串和之差
#include #include #include using namespace std;int dp[1000005], sum[1000005];int main(){ int t, n,a, b; scanf("%d", &t); while(t--) { memset(dp, 0, sizeof(dp))原创 2013-04-19 16:44:21 · 415 阅读 · 0 评论 -
动态规划之01 背包---Hd2602 Bone Collector
点击打开链接#include #include using namespace std;int c[1005],w[1005],f[1005];int n,v;void ZeroOnePack (){ int i,j; memset(f,0,sizeof(f)); for (i=1;i<=n;i++) // n是物体的件数 f原创 2013-04-19 08:45:16 · 446 阅读 · 0 评论 -
4632
这是一道区间dp的题目;题意:就是给你一个字符串,让你找出回文子序列(可以不连续)的总数。之前在Noj上的一道 【回文字符串】也可以用这种方法。如果str[i]=str[j] dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1]+1; else dp[i][j]=dp[i+1][j]+dp[i][j-1];dp[i][j]代表的是从原创 2013-08-03 17:06:37 · 1732 阅读 · 0 评论
分享