#include <iostream>
using namespace std;
#define n 10
void main()
{
int i,j,k,max,t=0;
int a[n];
for(i=0;i<n;i++)
{
while(1)
{
a[i]=rand()%100+1;
for(j=0;j<i;j++)
{
if(a[i]==a[j])
t+=1;
}
if(t==0)
break;
}
cout<<a[i]<<" ";
}
cout<<endl;
k = sizeof(a)/sizeof(a[0]); //数组的长度
int *len = new int[k],*next = new int[k]; //动态定义数组
for(i=0;i<k;++i)
len[i]=1,next[i]=-1;
for(i=k-2;i>=0;--i)
{
for(max=0,j=i+1;j<k;++j)
if(a[i]<=a[j])
{
if(max<len[j])
max=len[j];
}
for(j=i+1;j<k;++j)
if(a[i]<=a[j]&&len[j]==max)
{
len[i]=max+1;
next[i]=j;
}
}
for(max=0,i=0;i<k;++i)
if(max<len[i])
max=len[i],j=i;
cout<<"长度为:"<<max<<endl;
cout<<"最长递增子序列为:";
for(i=j;i!=-1;i=next[i])
cout<<a[i]<<' ';
cout<<endl;
}
第7周作业1——背包问题
最新推荐文章于 2024-08-27 12:22:52 发布