
DP
文章平均质量分 63
小堃哥
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
NYOJ+dp最大字串和+注意初始化赋值那,
点击打开链接#include #include #include #include #include #include #include #include #include using namespace std; int dp[1000010]; int main() { int N=0,n=0,i=0; long long maxn=0,temp=0; scanf("%原创 2016-03-06 23:58:06 · 311 阅读 · 0 评论 -
poj 1088+动态规划+记忆化搜索
/* 不能找最高点进行搜索 1 1 1 1 0 1 1 1 1 */ #include #include using namespace std; int Arr[110][110] = { 0 }, R = 0, C = 0, dp[110][110] = { 0 };//dp存储长度,记忆化搜索 int dfs(int row, int colum) { if (dp[row][colum]原创 2014-08-29 11:58:25 · 358 阅读 · 0 评论 -
poj2533 动态规划+最长上升子序列
#include #include using namespace std; int Arr[10000] = { 0 }, dp[10000] = { 0 }; int main() { int N = 0, i = 0,j=0,maxlength=0; cin >> N; for (i = 0; i dp[i] = 1; for (i = 0; i ci原创 2014-08-28 19:24:28 · 362 阅读 · 0 评论 -
poj 1050动态规划+最大子矩阵和+二维化为一维来求最大子串和值
/* 二维化为一维来求最大子序列值 */ #include #include using namespace std; int Arr[110][110] = { 0 },N=0,sum1=0,max1=0; void dp(int n) { int a = 0; sum1 += Arr[n][1]; for (a = 2; a <= N; a++) { if (sum1 < 0)原创 2014-08-30 00:14:06 · 337 阅读 · 0 评论 -
百练+dp or DFS+dp就是记忆化搜索,加个数组记忆
点击打开链接///dp[i] = dp[i - 1] + 2 * dp[i - 2] + (dp[ i - 1 ] - dp[i - 2]) ///dp[i - 1]是往北走 ///dp[i - 2] * 2是上一次往北过来的,这一次往东西走都可以,所以*2 ///dp[i - 1] - dp[i - 2]是上次不是北边过来的,只可以走一边(东或者西) #include #include #inc原创 2016-05-02 21:54:07 · 661 阅读 · 0 评论 -
九度+最短连续子序列+二维压缩为一维处理
点击打开链接///最短连续子序列的二维拓展。 #include #include #include #include #include #include #include #include #include #define LL long long #define inf 0x3f3f3f3f using namespace std; int matrix[110][110]; int num[1原创 2016-09-10 10:31:35 · 481 阅读 · 0 评论 -
百练+最长公共子序列+DP
点击打开链接// main.cpp // test // // Created by 吴有堃 on 2017/9/11. // Copyright © 2017年 吴有堃. All rights reserved. // #include #include #include #include #include #include #include #include #inc原创 2017-11-18 14:34:05 · 254 阅读 · 0 评论 -
百练+DP
点击打开链接// main.cpp // test // // Created by 吴有堃 on 2017/9/11. // Copyright © 2017年 吴有堃. All rights reserved. // #include #include #include #include #include #include #include #include #incl原创 2017-11-18 14:38:29 · 257 阅读 · 0 评论 -
区间DP+石子合并的变相题目
点击打开链接// main.cpp // test // Created by 吴有堃 on 2017/9/11. // Copyright © 2017年 吴有堃. All rights reserved. #include #include #include #include #include #include #include #include #include #原创 2017-12-07 10:20:10 · 209 阅读 · 0 评论 -
百练+一维度DP
点击打开链接#include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define LL long long using namespace std; int main() { int weight, num; double len; int原创 2018-01-01 21:45:14 · 142 阅读 · 0 评论 -
百练+区间DP+区间DP第一层是长度,第二层是区间起点,第三层是区间内进行区间DP
点击打开链接#include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define LL long long using namespace std; short dp[5005][5005]={0}; int main() { char s[5005];原创 2018-01-01 21:48:29 · 192 阅读 · 0 评论 -
百练+最长上升子序列+DP
点击打开链接#include #include #include #include #include #include #include #include #include #include #include #include #define LL long long #define inf 0x3f3f3f3f using namespace std; const int maxn=1e+5;原创 2017-11-18 14:32:02 · 174 阅读 · 0 评论 -
百练+01背包,一维度滚动数组DP
点击打开链接#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long long #define inf 0x3f3f3f3f #define mod 1e9+7 usin原创 2018-01-12 13:46:03 · 205 阅读 · 0 评论 -
poj 1163数塔 动态规划
#include #include int a[105][105]={0},d[105][105]={0},N=0; int main() { int i=0,j=0; scanf("%d",&N); for(i=1;i<=N;i++) { for(j=1;j<=i;j++) { scanf("%d",&a[i原创 2014-11-06 22:51:11 · 383 阅读 · 0 评论 -
NYOJ+最长上升子序列动态规划+数组因为输入数据时从位置0开始后面dp也是从0开始
点击打开链接#include #include #include #include using namespace std; int main() { char Arr[10005]={'\0'}; int n=0,len=0,seqlen[10005]={0},i=0,j=0,maxn=0,maxlen=0; scanf("%d",&n); while(n--)原创 2015-09-02 09:53:16 · 407 阅读 · 0 评论 -
NYOJ+dp0/1背包+小白上的滚动数组or二维的状态方程有点像最长公共子序列
点击打开链接#include using namespace std; #define MAXN 30010 ///其实只要理解了题目就会发现,只要把等级和价格成积看成是0/1背包的重量,然后把价格看成体积就可以直接按照0/1背包思路做了 ///0/1背包,假设当前背包可以装的体积为j;如果j >= V[i],说明第i个物品能够被背包装下, /// 这时考虑是装下得到的价值大还是不装下得到的价值大原创 2016-03-07 00:01:18 · 341 阅读 · 0 评论 -
NYOJ+dp+使用三维数组来记忆
点击打开链接///有点不是太理解额。 ///OI f[i][x1][x2]表示走了i步,一条路的横坐标位于x1,另一条路横坐标位于x2 #include #include #include #include #include #include #include #include using namespace std; int N,n,m; int a[55][55]; int f[155][55原创 2016-03-19 12:06:46 · 380 阅读 · 0 评论 -
nyoj+最长回文数,复制一个反转序列,然后求两个序列的最长公共字序列+也可以用区间dp做
点击打开链接///思路: ///逆置原字符串 和原字符串求最大公共子序列的长度 总长度减去该长度 即为所求 #include #include #include #include #include #include #include #include using namespace std; int dp[1005][1005]; int main() { int N=0,i=0,j=0,原创 2015-12-05 17:30:42 · 359 阅读 · 0 评论 -
nyoj+矩形嵌套,自己做的最长上升子序列+小白上时DAG最长路
点击打开链接#include #include #include #include #include #include #include #include using namespace std; struct Node { int a,b; }Rec[1005]; struct Seqlen { int len,wide; }seqlen[1005]; bool cmp(Node原创 2015-12-05 17:28:10 · 471 阅读 · 0 评论 -
nyoj+区间dp整数划分
点击打开链接///dp[i][j]表示从位置0到位置i时的加入j个乘号最大的结果。 ///Arr[i][j]位置i到位置j的整数值。 ///根据区间dp的思想,我们定义dp [ i ] [ j ]为从开始到 i 中加入 j 个乘号得到的最大值。 ///那么我们可以依次计算加入1----m-1个乘号的结果 ///而每次放入x个乘号的最大值只需枚举第x个乘号的放的位置即可 ///dp [ i ] [原创 2015-11-27 23:31:45 · 329 阅读 · 0 评论 -
nyoj+区间dp石子合并
点击打开链接#include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f using namespace std; int dp[205][205],sum[205],a[205]; int main() { int n=0,i=0,j=0,k=0,len=0;原创 2015-11-27 23:28:37 · 417 阅读 · 0 评论 -
nyoj+区间dp括号匹配
点击打开链接///首先考虑怎么样定义dp让它满足具有通过子结构来求解、 ///定义dp [ i ] [ j ] 为串中第 i 个到第 j 个括号的最大匹配数目 ///那么我们假如知道了 i 到 j 区间的最大匹配,那么i+1到 j+1区间的是不是就可以很简单的得到。 ///那么 假如第 i 个和第 j 个是一对匹配的括号那么dp [ i ] [ j ] = dp [ i+1 ] [ j-1 ] +原创 2015-11-27 23:24:51 · 379 阅读 · 0 评论 -
poj2385+动态规划有点还 不能完全理解
#include #include #include using namespace std; int dp[1005][35],t,W; int pos[31],T[1005]; ///dp[i][j]表示第i个苹果掉下的时候,走了j次收到的最多苹果。 ///dp[i][j] = max{dp[i-1][j-1],dp[i-1][j]} + (Ti == 当前位置)? 1 : 0 int原创 2015-09-21 17:03:11 · 411 阅读 · 0 评论 -
poj2229动态规划
如果i为奇数,肯定有一个1,把f[i-1]的每一种情况加一个1就得到fi,所以f[i]=f[i-1] 如果i为偶数,如果有1,至少有两个,则f[i-2]的每一种情况加两个1,就得到i,如果没有1,则把分解式中的每一项除2,则得到f[i/2]#include #include #include using namespace std; int f[1000005]; int main() {原创 2015-09-19 00:01:47 · 408 阅读 · 0 评论 -
poj1836动态规划+最长上升子序列变形+最长增和最长减然后找出分割点
记录每个人左边的最大升序列中的人数(注意:他自己也算一个并且身高严格递增),记录每个人右边的最大严格降序列的人数,也包括他自己。 然后代码中有第二种身高序列的处理。 #include #include #include #include using namespace std; #define N 1005 int up[N],down[N]; double Arr[N]; int mai原创 2015-09-17 17:04:56 · 417 阅读 · 0 评论 -
poj2479动态规划+两个子串最大和,一个从左往右扫描,一个从右往左扫描时在分割点变化时,找出最大的分割点是的值ans
在输入的同时,进行一次DP,计算出从左到右的最大值,并把它保存在数组dp的对应的下标元素中,这样之后,对于下标为i的元素,它其中保存的便是前面所有元素可能的最大连续和。再从右到左进行一次DP,计算从右到左的最大连续和。假设此时已经算到下标为i的元素,那么将sum+dp[i-1]与ans进 行比较,将ans取较大者。最后当i到2的时候ans中的值即为所求的最大值。#include #include原创 2015-09-15 16:42:11 · 577 阅读 · 0 评论 -
NYOJ动态规划最长公共子序列+二位数组递推dp
点击打开链接#include #include #include #include using namespace std; int Maxlen[1005][1005]; int main() { int N=0,len1=0,len2=0,i=0,j=0; char s1[1005]={'\0'},s2[1005]={'\0'}; scanf("%d",&N);原创 2015-09-02 20:42:31 · 454 阅读 · 0 评论 -
DP+01背包 完全背包
//背包问题 #include #include #include #include #include #include #include #include #include #include #define LL long long #define inf 0x3f3f3f3f #define mod 1e9+7 const int maxn=1e3+5; using namespace st原创 2018-01-05 00:47:50 · 159 阅读 · 0 评论