随笔分类 -  DP—基本dp

摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=1243d[i][j] 代表第i 个字符与第 j 个字符的最大的得分。,,最大公共子序列变形 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int maxn = 2000+10; 8 9 char s[maxn], x[maxn], y[maxn];10 int f[3000], val[maxn], d[maxn][maxn];11 int main()12 {13 ... 阅读全文
posted @ 2014-02-27 20:16 水门 阅读(200) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=1559 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int maxn = 1000+10; 8 const int INF = 1<<28; 9 int map[maxn][maxn]; //表示以[1,1]为左上角,以[i,j]为右下角的矩形的和10 11 int main()12 {13 int t, i, j, m, n, x, y;14 in... 阅读全文
posted @ 2014-02-26 17:08 水门 阅读(161) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1191黑书116页的例题将方差公式化简之后就是 每一块和的平方 相加/n , 减去平均值的平方。可以看出来 方差只与 每一块的和的平方有关,所以就是求每个矩形的总分的平方和 尽量小。。。。 1 #include 2 #include 3... 阅读全文
posted @ 2014-02-25 21:32 水门 阅读(179) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=4502思路:一个简单的dp ,比赛时没做出来呢。。。。。d[i]代表 到第i天时的最大值#include#include#include#includeusing namespace std;int main(){ int p[110][110],d[110]; int t,i,j,m,n,s,e,c; cin>>t; while(t--) { memset(p,0,sizeof(p)); memset(d,0,sizeof(d)); ... 阅读全文
posted @ 2013-11-03 21:23 水门 阅读(206) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1159 1 #include 2 #include 3 #include 4 using namespace std; 5 6 int mmin(int a,int b) 7 { 8 return a>b?b:a; 9 }10 short int d[5010][5010];11 int main()12 {13 int n,i,j;14 char s[5010];15 memset(d,0,sizeof(d));16 cin>>n;17 for(i=1; i>s[i];19 ... 阅读全文
posted @ 2013-10-28 21:32 水门 阅读(156) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1080题意:比较两个基因序列,测定它们的相似度,将两个基因排成直线,如果需要的话插入空格,使基因的长度相等,然后根据那个表格计算出相似度。题解:考虑f[i][j]:①s1取第i个,s2取第j个,f[i][j] = f[i-1][j-1]+value[m(s1[i])][m(s2[j])];②s1取第i个,s2用’-’,f[i][j] = f[i][j-1]+value[m(s1[i])][m(‘-’)];③s1用’-’,s2取第j个,f[i][j] = f[i-1][j]+value[m(‘-’)][m(s2[j])];f[i][j] 阅读全文
posted @ 2013-10-28 20:44 水门 阅读(204) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1836题意:最长上升子序列问题, 站队,求踢出最少的人数后,使得队列里的人都能看到 左边的无穷远处 或者 右边的无穷远处。代码O(n^2): 1 #include 2 #include 3 using namespace std; 4 5 int main() 6 { 7 int n,i,j,d1[1100],d2[1100],mx; 8 double a[1100]; 9 cin>>n;10 for(i=1; i>a[i];12 d1[1]=1;13 for(i=2; i0&&d1[... 阅读全文
posted @ 2013-10-26 19:50 水门 阅读(163) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2533题意:最长上升子序列。。。。 以前做过,课本上的思想 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 int main() 8 { 9 int m,a[1100];10 int d[1100],i,j,n;11 int nmax;12 cin>>n;13 for(i=1; i>a[i];16 }17 d[1]=1;18 for(i=1; i... 阅读全文
posted @ 2013-10-24 21:01 水门 阅读(154) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1260题意:给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠。珍珠的替代必须是连续的,不能跳跃替代(这个不难证明,因为假如用第i+2类去替代第i类珍珠,会使最终的支付价格降低,那么用第i+1类去替代第i类珍珠会使最终的支付价格更加低) 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 int main() 8 { 9 int t,i,j,num,minn,sum;10 int d[11... 阅读全文
posted @ 2013-10-24 19:41 水门 阅读(180) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=1837题意:求平衡状态, c个位置,g个物体重量,求有多少种平衡状态。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 int main() 7 { 8 int c,g,d[25][15000],h[25],w[25];//d 的第一个代表物品个数,第二个代表现在的平衡状态,>7500为向右偏 9 cin>>c>>g;10 for(int i=1; i>h[i];12 for(int i=1; i>w[i];14 mems 阅读全文
posted @ 2013-10-14 19:09 水门 阅读(161) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=3267题意:给定一个字符串,又给n个单词,求最少删除字符串里几个字母,能匹配到n个单词里 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 12 char s[700][400];13 int min_n(int a,int b)14 {15 return a>b?b:a;16 }17 int main()18 {19 i... 阅读全文
posted @ 2013-08-15 11:28 水门 阅读(177) 评论(0) 推荐(0)
摘要:用搜索(bfs,dfs)做了半天,都超时,原来是dp;参考博客:http://www.cnblogs.com/liuzezhuang/archive/2012/07/29/2613820.html 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int map[30][30],b[30][30]; 9 int main()10 {11 int h,w,i,j;12 cin>>h>>w;13 14 for(i=1; i>map[i][j];17 ... 阅读全文
posted @ 2013-07-29 11:15 水门 阅读(151) 评论(0) 推荐(0)
摘要:参考博客:http://blog.csdn.net/acm_davidcn/article/details/5834454d[i][j]表示到第i行的所有的同一列的和,3个for循环,时间复杂度O(n^3),表示从第i行到第j行 求从第1列到第n列 连续的最大值。ac代码: 1 #include<stdio.h> 2 #include<string.h> 3 int d[110][110]; 4 int main() 5 { 6 int n,i,j,max,k,sum,t; 7 while(~scanf("%d",&n)) 8 { 9 mem 阅读全文
posted @ 2013-06-07 20:29 水门 阅读(167) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1025参考博客:http://www.felix021.com/blog/read.php?1587最长不下降子序列,有一种DP+二分的求法最长递增子序列 O(NlogN)算法View Code 1 #include<stdio.h> 2 #include<string.h> 3 int a[500001],d[500001]; 4 int find(int a,int left,int rig) 5 { 6 int mid; 7 while(left<=rig) 8 阅读全文
posted @ 2013-05-11 21:21 水门 阅读(192) 评论(0) 推荐(0)
摘要:类似于数塔的变形,只不过是每个数下面要取的是三个数的最大值,另外注意边界。第0秒 5第1秒 4 5 6第2秒 3 4 5 6 7第3秒 2 3 4 5 6 7 8第4秒 1 2 3 4 5 6 7 8 9第5秒 0 1 2 3 4 5 6 7 8 9 10第6秒 0 1 2 3 4 5 6 7 8 9 10第7秒 .................我的代码:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int dp[100001][12]; 5 int ma 阅读全文
posted @ 2013-04-30 09:58 水门 阅读(163) 评论(0) 推荐(0)