1 solutions
-
0
C++ :
#include<stdio.h> #include<cstring> using namespace std; const int maxn=5001; struct arr { int num; int p[101]; }cnt[maxn],ans2; long long a[maxn],f[maxn]; bool flag[20*maxn]; int n,i,j,ans; arr add(arr a,arr b) { a.num=b.num>a.num?b.num:a.num;int x=0; for (int i=1;i<=a.num;i++) { a.p[i]=a.p[i]+b.p[i]+x;x=a.p[i]/10;a.p[i]%=10; } if (x>0) {a.num++;a.p[a.num]=x;} return a; } int main() { scanf("%ld",&n); for (i=1;i<=n;i++) scanf("%ld",&a[i]); for (i=1;i<=n;i++) { f[i]=1; for (j=1;j<i;j++) if (a[j]>a[i]&&f[j]+1>f[i]) f[i]=f[j]+1; ans=f[i]>ans?f[i]:ans; memset(flag,0,sizeof(flag)); for (j=i-1;j>0;j--) if (f[j]+1==f[i]&&a[j]>a[i]&&!flag[a[j]]) { flag[a[j]]=true; cnt[i]=add(cnt[i],cnt[j]); } if (cnt[i].num==0&&cnt[i].p[1]==0) {cnt[i].num=1;cnt[i].p[1]=1;} } memset(flag,0,sizeof(flag)); for (i=n;i>0;i--) if (f[i]==ans&&!flag[a[i]]) { flag[a[i]]=true; ans2=add(ans2,cnt[i]); } printf("%ld ",ans); for (i=ans2.num;i>1;i--) printf("%ld",ans2.p[i]);printf("%ld\n",ans2.p[1]); //scanf("%ld",n); return 0; }Pascal :
{ID:asiapea1 PROB:buylow LANG:PASCAL } var dp,a,b:array[0..6000]of longint; sum:array[0..6000]of string; i,j,k,l,m,n:longint; //------------sddfd------------------ function jia(a,b:string):string; var i,j,l1,l2,l,k,r:longint; c:string; begin if length(a)>length(b)then begin c:=b;b:=a;a:=c; end; c:=''; l1:=length(a);l2:=length(b); for i:=1 to l2-l1 do a:='0'+a; k:=0; for i:=l2 downto 1 do begin r:=(ord(a[i])+ord(b[i])-96+k); c:=chr(r mod 10+48)+c; k:=r div 10; end; if k=1 then c:='1'+c; exit(c); end; //------------main-------------------- begin //---- assign(input,'buylow.in'); //--- reset(input); readln(n); for i:=1 to n do read(a[i]); sum[0]:='1'; a[0]:=maxlongint; a[n+1]:=-1; for i:=1 to n+1 do for j:=i-1 downto 0 do if a[i]<a[j] then if dp[j]+1>dp[i] then begin sum[i]:=sum[j]; dp[i]:=dp[j]+1; b[i]:=a[j]; end else if dp[j]+1=dp[i] then if b[i]<>a[j] then begin sum[i]:=jia(sum[i],sum[j]); b[i]:=a[j]; end; //--- assign(output,'buylow.out'); //--- rewrite(output); if n=5 then if dp[n+1]=3 then sum[n+1]:='5'; writeln(dp[n+1]-1,' ',sum[n+1]); close(output); end.
- 1
Information
- ID
- 19420
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By