其实这个题目和求最长递增子序列的题目是一个思想,就是用DP做
代码如下:
// Dp5.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
const int MAX=1000;
int dp[MAX];
int data[MAX];
//找到最长递增序列的长度
int solveIncre(int a[],int len)
{
int ans=0;
for(int i=0;i<len;i++)
{
for (int j=0;j<i;j++)
{
if (a[j]<a[i]&&dp[i]<dp[j]+1)
{
dp[i]=dp[j]+1;
}
}
if (dp[i]>ans)
{
ans=dp[i];
cout<<a[i]<<" ";
}
}
cout<<endl;
return ans;
}
int solveDece(int a[],int len)
{
int ans = 0;
for (int i=0;i<len;i++)
{
for(int j=0;j<i;j++)
{
if (a[i]<a[j] && dp[i]<dp[j]+1)
{
dp[i]=dp[j]+1;
}
}
if (ans<dp[i])
{
ans=dp[i];
cout<<a[i];
}
}
cout<<endl;
return ans;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n;
cin>>n;
for (int i=0;i<n;i++)
{
cin>>data[i];
dp[i]=1;
}
//int ans = solveIncre(data,n);
int ans=solveDece(data,n);
cout<<ans<<endl;
system("pause");
return 0;
}
/
华丽的分割线
/
// Dp5.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
const int MAX=1000;
int dp[MAX];
int data[MAX];
//找到最长递增序列的长度
int solveIncre(int a[],int len)
{
int ans=0;
for(int i=0;i<len;i++)
{
for (int j=0;j<i;j++)
{
if (a[j]<a[i]&&dp[i]<dp[j]+1)
{
dp[i]=dp[j]+1;
}
}
if (dp[i]>ans)
{
ans=dp[i];
cout<<a[i]<<" ";
}
}
cout<<endl;
return ans;
}
int solveDece(int a[],int len)
{
int ans = 0;
for (int i=0;i<len;i++)
{
for(int j=0;j<i;j++)
{
if (a[i]<a[j] && dp[i]<dp[j]+1)
{
dp[i]=dp[j]+1;
}
}
if (ans<dp[i])
{
ans=dp[i];
cout<<a[i];
}
}
cout<<endl;
return ans;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n;
cin>>n;
for (int i=0;i<n;i++)
{
cin>>data[i];
dp[i]=1;
}
//int ans = solveIncre(data,n);
int ans=solveDece(data,n);
cout<<ans<<endl;
system("pause");
return 0;
}