题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4655
题意:给出n个石子,第i个石子可以染ai种颜色。对于每种颜色,比如颜色1221,我们称有3段。连续相同的为一段。合理安排石子的顺序使得所有染色方案的总段数之和最大?
思路:对于给出的一个数列,我是打表找到如何安排位置使得最后的答案最大,就是:
i64 a[N],p[N],q[N],d[N];
int n;
int main()
{
rush()
{
RD(n);
int i;
FOR1(i,n) RD(d[i]);
sort(d+1,d+n+1);
int j=1;
for(i=1;i<=n;i+=2) a[i]=d[j++];
for(i=n/2*2;i>=2;i-=2) a[i]=d[j++];
p[0]=q[n+1]=1;
FOR1(i,n)
{
p[i]=p[i-1]*a[i]%mod;
q[n+1-i]=q[n+1-i+1]*a[n+1-i]%mod;
}
i64 ans=n;
FOR1(i,n) ans=ans*a[i]%mod;
FOR1(i,n-1)
{
ans=ans-min(a[i],a[i+1])*p[i-1]%mod*q[i+2];
ans=(ans%mod+mod)%mod;
}
PR(ans);
}
}