您的位置:首页 > 其它

洛谷 P1108 低价购买

2015-11-05 23:51 176 查看
//求的是LIS的数量,而且不能长的一样

#include <iostream>
using namespace std;

int DP[6000];
long long Num[6000];
long P[6000];
int N;

int main(){
cin>>N;
for(int i=1;i<=N;i++)
cin>>P[i];

int max=-1;
for(int i=1;i<=N;i++){
long long number=0;

for(int j=1;j<i;j++)
if(P[i]<P[j] && DP[j]>DP[i])
DP[i]=DP[j];
DP[i]++;

if(DP[i]==1)
Num[i]=1;

for(int j=1;j<i;j++){
if(P[i]<P[j] && DP[i]-1==DP[j])
Num[i]+=Num[j];
else if(P[i]==P[j] && DP[i]==DP[j])
Num[j]=0;
}

if(DP[i]>max)
max=DP[i];
}

long long number=0;
for(int i=1;i<=N;i++)
if(DP[i]==max)
number+=Num[i];

cout<<max<<" "<<number;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: