首页 技术 正文
技术 2022年11月20日
0 收藏 567 点赞 2,847 浏览 1518 个字

 解法一

此题是一个简单的动态规划问题,用dp[i]记做最后一步经过第i个数所得到的最大sum值,则结果=max(dp[i]),i=1,…n.考虑dp[i]的前一步会经过那里?假设dp[i]的前一步经过第j个数,则子问题dp[j]满足最优子结构。dp[i]=a[i]+max(dp[j]) .(a[j]<a[i]);

/*---dp[i]表示最后一步经过第i个数
----转移方程dp[i]=a[i]+max(dp[j])(a[j]<a[i],j<i)
*/
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<vector>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long LL;
const int MAXN = 1000 + 10;
LL dp[MAXN];
int a[MAXN];
int main(){
int n, i, j;
while (scanf("%d", &n) && n){
for (i = 1; i <=n; i++)
scanf("%d", &a[i]);
memset(dp,0, sizeof(dp));
dp[1] = a[1];
LL ans =dp[1];
for (i = 2; i <= n; i++){
dp[i] = a[i];
for (j = 1; j < i; j++){
if (a[j]<a[i])
dp[i] = max(dp[i], dp[j]+a[i]);
}
ans = max(ans, dp[i]);
}
printf("%I64d\n", ans);
}
return 0;
}

  解法二  转化为GAD模型

考虑若i<j,同时选择a[i]和a[j]的合法条件是a[i]<a[j].于是在数组中寻找满足i<j且a[i]<a[j],将i向j连接一条有向边。用dp[i]表示从i出发可以得到的最大和,则有:

dp[i]=a[i]+max(dp[j]) .j是i的邻接点。采用记忆化搜索来求解。

/*---DAG模型求解
----若序列中a[i]<a[j](i<j)则从i到j连接一条有向边
*/
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<vector>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long LL;
const int MAXN = 1000 + 10;
LL dp[MAXN];
int a[MAXN];
vector<int>vec[MAXN];
//记忆化搜索
LL dfs(int i){
LL &ans = dp[i];
if (ans >= 0)
return ans;
ans = 0;
for (int j = 0; j < (int)vec[i].size(); j++){
ans = max(ans,dfs(vec[i][j]));
}
return ans=ans + a[i];
}
int main(){
int n, i,j;
while (scanf("%d", &n) && n){
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = 0; i < n; i++){
vec[i].clear();
for (j = i + 1; j < n; j++){
if (a[j]>a[i])
vec[i].push_back(j); //i到j有向边
}
}
LL ans = 0;
memset(dp, -1, sizeof(dp));
for (i = 0; i < n; i++){
if (dp[i]<0)
dp[i] = dfs(i);
ans = max(ans, dp[i]);
}
printf("%I64d\n", ans);
}
return 0;
}

  

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,000
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,512
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,358
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,141
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,771
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,849