DP————1003
2016-05-14 10:48
225 查看
题目:Super Jumping
题意:一个棋盘和一些旗子,棋子有大小的整数数字或者开始或者结束,在整个过程中不能后退,且整数比递 增,求最大数和
思路:类似最大递增子段,只不过这里求的是到第i个元素时,其最大递增子段的和dp[i]。输出最大的那个值k。
感想:sum[j]=max{sum[i]}+a[j]; 其中,0<=i<=j,a[i]<a[j]
代码:
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a[10005];
int dp[10005];
int n,i,j,k,s;
while(cin>>n&&n!=0)
{
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
s=-32768;
for(j=0;j<i;j++)
{
if(a[i]>a[j])
{
s=max(s,dp[j]);
}
}
dp[i]=s+a[i];
}
int k=-32768;
for(i=1;i<=n;i++)
{
if(dp[i]>k ) k=dp[i];
}
cout<<k<<endl;
}
return 0;
}
题意:一个棋盘和一些旗子,棋子有大小的整数数字或者开始或者结束,在整个过程中不能后退,且整数比递 增,求最大数和
思路:类似最大递增子段,只不过这里求的是到第i个元素时,其最大递增子段的和dp[i]。输出最大的那个值k。
感想:sum[j]=max{sum[i]}+a[j]; 其中,0<=i<=j,a[i]<a[j]
代码:
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a[10005];
int dp[10005];
int n,i,j,k,s;
while(cin>>n&&n!=0)
{
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
s=-32768;
for(j=0;j<i;j++)
{
if(a[i]>a[j])
{
s=max(s,dp[j]);
}
}
dp[i]=s+a[i];
}
int k=-32768;
for(i=1;i<=n;i++)
{
if(dp[i]>k ) k=dp[i];
}
cout<<k<<endl;
}
return 0;
}
相关文章推荐
- hive介绍
- mysql工作中常见问题
- laravel框架学习笔记--阿里云部署
- Java 回调机制
- sdibt 1244 烦人的幻灯片
- 第一章 Shiro简介——《跟我学Shiro》
- 【HDU】 4309 Seikimatsu Occult Tonneru
- sdibt 1244 烦人的幻灯片
- php 可变变量
- magento 列表页显示产品属性值的几种调用方式
- 【bzoj1149】 [CTSC2007]风玲Mobiles
- openjudge7624 山区建小学
- hdoj-2099-整除的尾数
- 判断无向图是否有环
- Docker学习 ----常用操作命令大全及例子[陆续更新中...]
- word2vec (一) 简介与训练过程概要
- 如何制作纯 ASCII 文本流程图
- Python安装模块出错(ImportError: No module named setuptools)解决方法
- Android小技巧
- 街区最短路径问题