POJ 1952 C++:BUY LOW, BUY LOWER

原创 2017年01月03日 15:19:29

思路:

1. 用两个数组分别存长度和方法数(动态规划)
2. 找到第一个比i大的数,将已i结尾的长度和方法数赋值
3. 如果又找到一个比i大的数,长度正好为i-1,那么就更新i的方法数
4. 如果找到一个数和i相等,并且此时i的长度还是初始化的1,那么将i的方法数置为0,并且break
#include <stdio.h>
#include <iostream>
using namespace std;
int n;
int a[5005];
int dp[5005];
int num[5005];
int main(){
	cin>>n;
	int i;
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
		dp[i]=1;
		num[i]=1;
	}
	int j;
	for(i=1;i<n;i++){
		for(j=i-1;j>=0;j--){
			if(a[j]>a[i]){
				if(dp[j]+1>dp[i]){
					dp[i]=dp[j]+1;
					num[i]=num[j];
				}
				else if(dp[j]+1==dp[i]){
					num[i]+=num[j];
				}
			}
			else if(a[j]==a[i]){
				if(dp[i]==1)num[i]=0;
				break;
			}
		}
	}
	int maxlen=0;
	for(i=0;i<n;i++){
        if(dp[i]>maxlen)maxlen=dp[i];
	}
	int maxsum=0;
	for(i=0;i<n;i++){
		if(dp[i]==maxlen)maxsum+=num[i];
	}
	cout<<maxlen<<' '<<maxsum<<endl;
	

	return 0;
}


版权声明:本文为博主原创文章,转载请注明出处

poj1952--BUY LOW, BUY LOWER题解

来源:http://poj.org/problem?id=1952 思路:此题第一问是要求最长递减数列的长度,这问用DP很容易解决,但关键是第二问要求最长递减数列的个数,下面直接贴代码。 代码:#...
  • ME495
  • ME495
  • 2015年07月22日 23:41
  • 238

poj 1952 BUY LOW, BUY LOWER(求最长下降子序列个数)

BUY LOW, BUY LOWER Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 7475   Accepte...
  • WEYuLi
  • WEYuLi
  • 2013年07月05日 17:29
  • 536

poj 1952 BUY LOW, BUY LOWER dp

点击打开题目链接

POJ 1952 BUY LOW,BUY LOWER 最长递减子序列 动态规划

POJ 1952 BUY LOW,BUY LOWER题目描述:  题目链接:POJ 1952 BUY LOW,BUY LOWER题目大意:  题目背景是股市,要求在给定的价格序列中求每次购买价格都下降...

POJ1952 BUY LOW, BUY LOWER

这题要求最长下降子序列的长度和个数,我们可以增加 数组maxlen[size](记录当前第1个点到第i个点之间的最长下降序列长度) 和maxnum[size](记录1~i之间的最长下降序列个数 ) ,...

poj 1952 BUY LOW, BUY LOWER【解法一】

dp统计方案数+离散化
  • sdfzyhx
  • sdfzyhx
  • 2016年07月28日 20:47
  • 209

POJ-1952 BUY LOW, BUY LOWER(线性DP)

POJ-1952 BUY LOW, BUY LOWER(线性DP)
  • Dacc123
  • Dacc123
  • 2016年01月04日 19:42
  • 197

poj1952(BUY LOW,BUY LOWER)(dp记录方案个数)

简单说一下题意,就是求最长递减子序列,并且!!!求出总共有多少个不同的最长子序列,比如 9 99 100 97 100 97 100 101 98 96 这组样例中的最长递减子序列长度为3, ...

poj 1952buy low, buy lower

The advice to "buy low" is half the formula to success in the bovine stock market.To be considered a...

POJ 1952 BUY LOW, BUY LOWER DP

BUY LOW , BUY LOWER Time Limit: 1000MS Memory Limit: 30000KB http://poj.org/problem?id=1952 先来看看d...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 1952 C++:BUY LOW, BUY LOWER
举报原因:
原因补充:

(最多只允许输入30个字)