最长非降子序列(Sequence)
给定一个由N个正整数组成的序列S (N<=1000),从其中删除M个数字,使剩下的序列非降,编写函数Sequence(S)求M的最小值。
给定一个由N个正整数组成的序列S (N<=1000),从其中删除M个数字,使剩下的序列非降,编写函数Sequence(S)求M的最小值。
#include
<
iostream
>
#include < string >
#include < fstream >
using namespace std;
#define MAX 1000
int f[MAX]; // f[i]表示选i,i+1~n都不选
int num[MAX];
int n;
int i,j;
int tmp;
int main()
{
ifstream in("in.txt");
in >>n;
for (i=1;i<=n;++i) in >>num[i];
f[1]=1;
for (i=2;i<=n;++i)
{
tmp=0;
for (j=1;j<i;++j)
{
if (num[i]>=num[j]&&f[j]>tmp)
{
tmp=f[j];
}//end if
f[i]=tmp+1;
cout <<"f["<<i<<"]= "<<f[i]<<endl;
}//end for j
}//end for i
//找最大
tmp=0;
for (i=1;i<=n;++i)
{
if (tmp<f[i]) tmp=f[i];
}
cout <<"Max:"<<tmp<<endl;
system ("pause");
}
#include < string >
#include < fstream >
using namespace std;
#define MAX 1000
int f[MAX]; // f[i]表示选i,i+1~n都不选
int num[MAX];
int n;
int i,j;
int tmp;
int main()
{
ifstream in("in.txt");
in >>n;
for (i=1;i<=n;++i) in >>num[i];
f[1]=1;
for (i=2;i<=n;++i)
{
tmp=0;
for (j=1;j<i;++j)
{
if (num[i]>=num[j]&&f[j]>tmp)
{
tmp=f[j];
}//end if
f[i]=tmp+1;
cout <<"f["<<i<<"]= "<<f[i]<<endl;
}//end for j
}//end for i
//找最大
tmp=0;
for (i=1;i<=n;++i)
{
if (tmp<f[i]) tmp=f[i];
}
cout <<"Max:"<<tmp<<endl;
system ("pause");
}