poj 1952最长子序列 计数加去重

xiaoxiao2021-02-28  112

#include<cstdio> #include<cstring> #define MAX(x,y) ((x)>(y)?(x):(y)) int dp[10000]; int d[10000]; int num[10000]; int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&d[i]); num[i]=1; dp[i]=1; } int len=1; for(int i=1;i<n;i++) { for(int j=0;j<i;j++) { if(d[j]>d[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(d[i]==d[j]) { num[j]=0; } } len=MAX(len,dp[i]); } int res=0; for(int i=0;i<n;i++) if(dp[i]==len) res+=num[i]; printf("%d %d\n",len,res); return 0; }
转载请注明原文地址: https://www.6miu.com/read-69747.html

最新回复(0)