Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
b[i][j]表示i个取j个最大,c[i][j]表示最小,分别把路径记下来即可#include<iostream> #include<math.h> using namespace std; #define maxn 105 struct Number { double exp; int flag; void Change(double num) { if (fabs(num)<1e-6) flag=0; else if (num>0) exp=log(num),flag=1; else exp=log(-num),flag=-1; } void Set(int f) { flag=f; exp=1000000.0; } void Print() { printf("%d %lf ",flag,exp); } } a[maxn],b[maxn][maxn],c[maxn][maxn]; int n,k,num[maxn]; int d[maxn][maxn],e[maxn][maxn]; void Init() { scanf("%d%d",&n,&k); for (int i=0; i<n; i++) scanf("%d",&num[i]); sort(num,num+n); for (int i=1; i<=n; i++) a[i].Change((double)num[i-1]); } inline int Sign(double x) { if (fabs(x)<1e-6) return 0; return (x>0)?1:-1; } inline int Compare(Number a,Number b) { if (a.flag!=b.flag) return a.flag-b.flag; if (a.flag>0 && b.flag>0) return Sign(a.exp-b.exp); if (a.flag<0 && b.flag<0) return Sign(b.exp-a.exp); return 0; } inline Number Product(Number a,Number b) { a.exp+=b.exp; a.flag*=b.flag; return a; } void Dp() { for (int i=0; i<maxn; i++) for (int j=0; j<maxn; j++) b[i][j].Set(-1),c[i][j].Set(1); for (int i=0; i<maxn; i++) b[i][0].Change(1.0),c[i][0].Change(1.0); for (int i=1; i<=n; i++) for (int j=1; j<=min(i,k); j++) { if (j<i) { b[i][j]=b[i-1][j]; c[i][j]=c[i-1][j]; } Number tmp; if (a[i].flag>=0) tmp=Product(a[i],b[i-1][j-1]); else tmp=Product(a[i],c[i-1][j-1]); if (Compare(tmp,b[i][j])>0) { b[i][j]=tmp; d[i][j]=1; } if (a[i].flag>=0) tmp=Product(a[i],c[i-1][j-1]); else tmp=Product(a[i],b[i-1][j-1]); if (Compare(tmp,c[i][j])<0) { c[i][j]=tmp; e[i][j]=1; } } } void Print() { int now=n,flag=1; while (k) if (flag) { if (d[now][k]) { printf("%d ",num[now-1]),k--; if (num[now-1]<0) flag^=1; } now--; } else { if (e[now][k]) { printf("%d ",num[now-1]),k--; if (num[now-1]<0) flag^=1; } now--; } printf("\n"); } int main() { Init(); Dp(); Print(); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator