动态规划问题中的几个经典问题代码
来源:互联网 发布:淘宝摄影店 编辑:程序博客网 时间:2024/05/23 00:47
动态规划经典问题描述:http://www.cnblogs.com/little-YTMM/p/5372680.html
动态规划过程详细步骤:http://blog.csdn.net/a45872055555/article/details/29224177
求一个序列的最大非降序子序列问题:
#include <iostream>
using namespace std;
int lis(int A[], int n)
{
int *d = new int[n];//创建一个数组来存储序列中每个位置的最长子序列的值
int len = 1;
for (int i = 0; i < n; ++i)
{
d[i] = 1;
for (int j = 0; j < i; ++j)
if (A[j] <= A[i] && d[j] + 1 > d[i])//这句话就表示在A[j]<=A[i] 的情况下,找出d[i]前面中的最大值+1赋给d[i]
d[i] = d[j] + 1;
if (d[i] > len) len = d[i];
}
delete[] d;
return len;
}
int main()
{
int A[] = { 5,3,4,8,6,7 };
cout << lis(A, 6) << endl;
system("pause");
return 0;
}
动态规划取苹果问题:
#include <iostream>
using namespace std;
int Apple(int **A, int n, int m)
{
int** s = new int*[n];
for (int i = 0; i < n; ++i)
s[i] = new int[m];
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
{
int increment = A[i][j];
int left = 0, up = 0;
if (i > 0)
up = s[i - 1][j];
if (j > 0)
left = s[i][j - 1];
int neighbor = left >= up ? left : up;
s[i][j] = neighbor + increment;
}
}
int result = s[n - 1][m - 1];
for (int i = 0; i < n; ++i)
delete[] s[i];
delete[] s;
return result;
}
int main()
{
int N, M,n;
cin >> N >> M;
int** d = new int*[N];
for (int i = 0; i < N; ++i)
d[i] = new int[M];
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
cin >> d[i][j];
int res = Apple(d, N, M);
cout << res << endl;
system("pause");
return 0;
}
- 动态规划问题中的几个经典问题代码
- 动态规划中的经典问题
- 动态规划经典问题
- 动态规划经典问题
- 动态规划经典问题
- 动态规划经典问题
- 动态规划经典问题
- 动态规划经典问题
- 算法:C++实现动态规划中的几个典型问题
- 动态规划解决经典问题
- 面试经典动态规划问题
- 动态规划经典问题总结
- 经典动态规划问题总结
- 经典代码 南阳 oj 动态规划 背包问题
- 动态规划经典问题--TSP问题
- 博弈论中的几个经典问题
- 【动态规划】多部图问题代码
- 动态规划问题的几个合集
- Wireshark安装使用及报文分析(图文详解)
- JAVA深入研究——Method的Invoke方法。
- 【HTML5学习笔记】21:CSS盒模型 上
- Spring Boot Spring MVC Rest json输出日期的问题
- Codeforces 828 E DNA Evolution(树状数组方法)
- 动态规划问题中的几个经典问题代码
- Java多线程基础,线程的创建使用以及终止
- linux服务器开发三(网络编程)
- mysql的定时计划任务如何关闭
- 2017.07.12【NOIP提高组】模拟赛B组
- 获取系统信息之Packages.xml文件
- 高斯混合模型
- EXCEL导入
- 带有倒计时功能的button