04 2015 档案

叠放箱子解题报告
摘要:带权值的最长上升子序列f[i]表示从后往前讨论叠放i个箱子的最小重量(因为是反向读入,其实从前往后讨论,更像最长上升子序列了)动规方程: f[k+1]=mid(f[k+1], self[i]+f[k]) (stand[i]>=f[k]) (0 2 #define maxn 1001 3 #defin... 阅读全文

posted @ 2015-04-12 10:22 Formiko 阅读(364) 评论(0) 推荐(1)

最长上升子序列解题报告
摘要:动规方程f[i]=f[j]+1(1<=j<i, a[j]<a[i])教训最长上升子序列有一个特点,就是答案最小都是1,所以可以给f[i]赋值为1,还有一种处理方式是并不赋值为1,但是在输出答案的时候加1就好了(其实就是偏移量)。给每个f[i]加1其实就意味着每个数都可能是最长上升子序列的第一个元素。... 阅读全文

posted @ 2015-04-11 20:22 Formiko 阅读(155) 评论(0) 推荐(0)

矩形套矩形解题报告
摘要:最长递增子序列这到题给我的启发是:1,最长递增子序列实际上就是不知道起点的动规模型。2,动规运用在有序的数据上(如果不对矩形进行排序处理,就没有“前面的矩形不可能包含后面矩形的断言”==“前面的数小于后面的数”)做法:排序+最长递增子序列动规方程:f[i]=max(f[j]+1)(1 2 int a... 阅读全文

posted @ 2015-04-11 20:12 Formiko 阅读(201) 评论(0) 推荐(0)

射箭解题报告
摘要:带权值的最长公共子序列相当于用箭和怪建矩阵在g[i][k]上找最长公共子序列-2 -4 4 3 2-1 -3 5 4 3-7 -9 -1 -2 -3 0 -2 6 5 4f[i][k]=max(f[i][k]+g[i][k], f[i-1][k], f[i][k-1])动规方程#incl... 阅读全文

posted @ 2015-04-11 18:57 Formiko 阅读(146) 评论(0) 推荐(0)

最长公共子序列解题报告
摘要:if(x[i]==y[j]) f[i][j]=f[i-1][j-1]+1;else if(x[i]!=y[j]) f[i][j]=max(f[i-1][j], f[i][j-1]);原决策这一块其实动规方程是f[i][j]=max(f[i-1][j-1]+(x[i]==y[j]), f[... 阅读全文

posted @ 2015-04-11 18:55 Formiko 阅读(193) 评论(0) 推荐(0)

数列操作问题
摘要:线段树或树状数组 1 线段树 2 #include 3 int sum[100001]; 4 struct node 5 { 6 int v, a, b, left, right; 7 }; 8 node tree[200100]; 9 int tot=0, d, k, s, t;10 v... 阅读全文

posted @ 2015-04-11 17:47 Formiko 阅读(140) 评论(0) 推荐(0)

数字金字塔解题报告
摘要:用二维数组记录数,每一个数a[i][k]对应的下两个数是a[i+1][k]和a[i+1][k+1]队列数组也可以记忆化搜索从下往上讨论DP==从下往下讨论DP, f[i][k]从塔顶到此处的最大路径引申滚动数组 1 #include 2 using namespace std; 3 #define... 阅读全文

posted @ 2015-04-11 17:45 Formiko 阅读(404) 评论(0) 推荐(0)