上一页 1 ··· 7 8 9 10 11 12 13 下一页
摘要: 线段树。各种WA。最后过了,老泪纵横。View Code 1 #include <stdio.h> 2 #define MAXN 100001 3 int col[MAXN * 4],lazy[MAXN * 4]; 4 void update(int cur) 5 { 6 col[cur] = col[cur << 1] | col[cur << 1 | 1]; 7 } 8 9 void pushdown(int cur,int x,int y) 10 { 11 int mid = (x + y) >> 1,ls = cur << 1 阅读全文
posted @ 2012-07-15 17:19 浙西贫农 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 换行出错。WA了一次。。用a[i][j]表示从第i个主题上到第j个主题所需要的时间,d[i][0]表示上完第i个主题所需课时数的最小值,d[i][1]表示在上完第i个主题所需课时数最小的情况下,不满意度DI的最小值。下面贴代码:View Code 1 #include <stdio.h> 2 #include <string.h> 3 int a[1001][1001],d[1001][2],C,time; 4 int DI(int a) 5 { 6 if(a == time) 7 return 0; 8 if(time - a <= 10) 9 ... 阅读全文
posted @ 2012-07-06 10:55 浙西贫农 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 足足跑了2秒啊。。。贴代码:View Code 1 #include <stdio.h> 2 #include <string.h> 3 char str[1001]; 4 int dp[1001][1001],p[1001][1001]; 5 int DP(int x,int y) 6 { 7 int &ans = dp[x][y]; 8 if(ans != -1) 9 return ans;10 if(x >= y)11 {12 ans = 0;13 return ans;14 }15 if(... 阅读全文
posted @ 2012-05-26 21:21 浙西贫农 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 本题的这个状态转移方程真的是自己推出来的。。用dp(i,j)表示从第i个字符到第j个字符删去字符使得字符串为回文串的方法数,得到的状态转移方程是:if(str[i]==str[j]) dp(i,j)=dp(i,j-1)+dp(i+1,j)+1else dp(i,j)=dp(i,j-1)+dp(i+1,j)-dp(i+1,j-1)其中dp数组要用long long int,否则就会像我一样TLE。。下面简单讲一下我自己的思路。先讲if(str[i]!=str[j]) dp(i,j)=dp(i,j-1)+dp(i+1,j)-dp(i+1,j-1)当第i个字符跟第j个字符不相等时,首先,去掉第j.. 阅读全文
posted @ 2012-05-15 20:24 浙西贫农 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 其实这个题目可以用原来的换硬币的方法来解决,但是这个题目是也是一个这样的问题:求把一个整数i最多拆分成j个数时的方法数。f[i][j]表示把一个整数i最多拆分成j个数时的方法数,f[0][0]=1;状态转移方程是f[i][j]=f[i-j][j]+f[i][j-1].下面贴代码:View Code 1 #include <stdio.h> 2 #include <string.h> 3 long long int f[301][301]; 4 char s[100]; 5 int main() 6 { 7 int a,b,c,i,j; 8 memset(f,0,size 阅读全文
posted @ 2012-05-12 21:07 浙西贫农 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 本题抄自staginner(斌哥)。。先做一下心得体会:我被这题虐了。。。。话说这题当时还是上个月看的。当然,抄完这题也真的很长见识的。有的时候,真的不是说想不出来,而是根本不敢去想,或者说没深入的去想这个问题,就直接把自己的假设枪毙了。先复述一下斌哥的思路:1.首先,我们需要知道,当力量较大的乌龟置于下面时,对这两只乌龟来说,他们的总体承重能力是肯定大于当力量较小的乌龟置于下面的时候的。这个可以简单的证明一下:假设力量大的乌龟的力量是s1,自重是w1;力量小的乌龟的力量是s2,自重是w2;(s1>s2)当力量较大的乌龟在下面时,假设他们的总体承重能力是A,那么A=min{s1-w1-w 阅读全文
posted @ 2012-05-09 19:04 浙西贫农 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 滚动数组滚过。贴代码:View Code 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int dp[31],p[1001],w[1001]; 5 int main() 6 { 7 int ncase; 8 cin>>ncase; 9 while(ncase--)10 {11 int N,G,i,j,temp,total = 0;12 cin>>N;13 for(i = 1;i <= N;i++)14 ... 阅读全文
posted @ 2012-05-09 15:28 浙西贫农 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 感觉这个DP好暴力的。。一开始没有想出来,后来百度了。。瞄了一眼,看到DP的记忆化搜索里面套了一个两个嵌套的for循环,才明白大概是个什么思路,原来,这里的DP用的那么暴力。本题用了两个DP来解决。大概的思路可以再记忆化搜索的过程中体现。还有,在输出0 0这样的数据的时候不用换行,百思不得其解。。这个还是百度出来的。最初在写记忆化搜索的时候,漏了一个&,改了半天,买个教训,后来改的都快跟人家的一模一样了,这个最悲剧了,核心部分是对的,然后改细节。。。下面贴代码:View Code 1 #include <iostream> 2 #include <cstdio> 阅读全文
posted @ 2012-05-08 22:14 浙西贫农 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 感谢lzxskjo先生让我“剽窃”他的劳动成果。当然,更要感谢被他剽窃了的那个人。以下引用某论文:一. 什么是单调(双端)队列单调队列,顾名思义,就是一个元素单调的队列,那么就能保证队首的元素是最小(最大)的,从而满足动态规划的最优性问题的需求。单调队列,又名双端队列。双端队列,就是说它不同于一般的队列只能在队首删除、队尾插入,它能够在队首、队尾同时进行删除。【单调队列的性质】一般,在动态规划的过程中,单调队列中每个元素一般存储的是两个值:1. 在原数列中的位置(下标)2. 他在动态规划中的状态值而单调队列则保证这两个值同时单调。从以上看,单调队列的元素最好用一个类来放,不这样的话,就要开两个 阅读全文
posted @ 2012-05-01 14:17 浙西贫农 阅读(479) 评论(0) 推荐(1) 编辑
摘要: 练习打印路径。。本题居然没有PE,搞死我了。。后来还是参考了一位名为“加速!!!!!!!!!!”的好人的BLOG,自己改了半天才过了。思路就是dp[i][j][k]代表从(i,j)出发,到达最底层的权值之和为k的路径条数,细节方面小心点。哎~~贴代码:View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 typedef long long int llg; 6 llg dp[50][50][501]; 7 int le 阅读全文
posted @ 2012-04-30 23:05 浙西贫农 阅读(231) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 下一页