DP
文章平均质量分 57
小堃哥
这个作者很懒,什么都没留下…
展开
-
NYOJ+dp最大字串和+注意初始化赋值那,
点击打开链接#include#include#include#include#include#include#include#include#includeusing 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 · 279 阅读 · 0 评论 -
poj 1088+动态规划+记忆化搜索
/*不能找最高点进行搜索1 1 11 0 11 1 1*/#include#includeusing 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 · 327 阅读 · 0 评论 -
poj2533 动态规划+最长上升子序列
#include#includeusing 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 · 328 阅读 · 0 评论 -
poj 1050动态规划+最大子矩阵和+二维化为一维来求最大子串和值
/*二维化为一维来求最大子序列值*/#include#includeusing 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 · 288 阅读 · 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 · 611 阅读 · 0 评论 -
九度+最短连续子序列+二维压缩为一维处理
点击打开链接///最短连续子序列的二维拓展。#include#include#include#include#include#include#include#include#include#define LL long long#define inf 0x3f3f3f3fusing namespace std;int matrix[110][110];int num[1原创 2016-09-10 10:31:35 · 430 阅读 · 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 · 189 阅读 · 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 · 212 阅读 · 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 · 169 阅读 · 0 评论 -
百练+一维度DP
点击打开链接#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f#define LL long longusing namespace std;int main(){ int weight, num; double len; int原创 2018-01-01 21:45:14 · 112 阅读 · 0 评论 -
百练+区间DP+区间DP第一层是长度,第二层是区间起点,第三层是区间内进行区间DP
点击打开链接#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f#define LL long longusing namespace std;short dp[5005][5005]={0};int main(){ char s[5005];原创 2018-01-01 21:48:29 · 156 阅读 · 0 评论 -
百练+最长上升子序列+DP
点击打开链接#include#include#include#include#include#include#include#include#include#include#include#include#define LL long long#define inf 0x3f3f3f3fusing namespace std;const int maxn=1e+5;原创 2017-11-18 14:32:02 · 134 阅读 · 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+7usin原创 2018-01-12 13:46:03 · 152 阅读 · 0 评论 -
poj 1163数塔 动态规划
#include#includeint 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 · 339 阅读 · 0 评论 -
NYOJ+最长上升子序列动态规划+数组因为输入数据时从位置0开始后面dp也是从0开始
点击打开链接#include#include#include#includeusing 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 · 375 阅读 · 0 评论 -
NYOJ+dp0/1背包+小白上的滚动数组or二维的状态方程有点像最长公共子序列
点击打开链接#includeusing namespace std;#define MAXN 30010///其实只要理解了题目就会发现,只要把等级和价格成积看成是0/1背包的重量,然后把价格看成体积就可以直接按照0/1背包思路做了///0/1背包,假设当前背包可以装的体积为j;如果j >= V[i],说明第i个物品能够被背包装下,/// 这时考虑是装下得到的价值大还是不装下得到的价值大原创 2016-03-07 00:01:18 · 311 阅读 · 0 评论 -
NYOJ+dp+使用三维数组来记忆
点击打开链接///有点不是太理解额。///OI f[i][x1][x2]表示走了i步,一条路的横坐标位于x1,另一条路横坐标位于x2#include#include#include#include#include#include#include#includeusing namespace std;int N,n,m;int a[55][55];int f[155][55原创 2016-03-19 12:06:46 · 327 阅读 · 0 评论 -
nyoj+最长回文数,复制一个反转序列,然后求两个序列的最长公共字序列+也可以用区间dp做
点击打开链接///思路:///逆置原字符串 和原字符串求最大公共子序列的长度 总长度减去该长度 即为所求#include#include#include#include#include#include#include#includeusing namespace std;int dp[1005][1005];int main(){ int N=0,i=0,j=0,原创 2015-12-05 17:30:42 · 313 阅读 · 0 评论 -
nyoj+矩形嵌套,自己做的最长上升子序列+小白上时DAG最长路
点击打开链接#include#include#include#include#include#include#include#includeusing 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 · 430 阅读 · 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 · 281 阅读 · 0 评论 -
nyoj+区间dp石子合并
点击打开链接#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3fusing 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 · 367 阅读 · 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 · 337 阅读 · 0 评论 -
poj2385+动态规划有点还 不能完全理解
#include#include#includeusing 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 · 374 阅读 · 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#includeusing namespace std;int f[1000005];int main(){原创 2015-09-19 00:01:47 · 378 阅读 · 0 评论 -
poj1836动态规划+最长上升子序列变形+最长增和最长减然后找出分割点
记录每个人左边的最大升序列中的人数(注意:他自己也算一个并且身高严格递增),记录每个人右边的最大严格降序列的人数,也包括他自己。然后代码中有第二种身高序列的处理。#include#include#include#includeusing namespace std;#define N 1005int up[N],down[N];double Arr[N];int mai原创 2015-09-17 17:04:56 · 382 阅读 · 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 · 524 阅读 · 0 评论 -
NYOJ动态规划最长公共子序列+二位数组递推dp
点击打开链接#include#include#include#includeusing 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 · 414 阅读 · 0 评论 -
DP+01背包 完全背包
//背包问题#include#include#include#include#include#include#include#include#include#include#define LL long long#define inf 0x3f3f3f3f#define mod 1e9+7const int maxn=1e3+5;using namespace st原创 2018-01-05 00:47:50 · 112 阅读 · 0 评论