Brief description:
… 问随机数列 {Ai} 的最大绝对子段合。。 (既最大子段和或最小子段和的绝对值中取较大。。) .. .
(。。Ai 取自 {-1, 1}。。。)
Analysis:
… 分析不能的我。。。只有打表找规律了。。
const int N = 100;
DB F[N], D[N], G[N], avg;
int A[N], nn, n, m;
int f(){
int res = 0, sum = 0;
REP(i, n){
sum = max(0, sum + A[i]);
checkMax(res, sum);
}
return res;
}
int g(){
int res = 0, sum = 0;
REP(i, n){
sum = max(0, sum - A[i]);
checkMax(res, sum);
}
return res;
}
void dfs(int k = 0){
if (k == n){
avg += max(f(), g());
}
else {
FOR_1_N(A[k], -m, m){
if (A[k])
dfs(k+1);
}
}
}
int main(){
//freopen("in.txt", "r", stdin);
m = 1, nn = 12; FOR_N(n, 1, nn){
avg = 0, dfs(); //avg /= pow(2.0 * m, n);
F[n] = avg;
}
REP(i, nn) D[i] = F[i+1] - F[i];
REP(i, (nn-1)/2) G[i] = D[2*(i+1)] / D[2*i];
printf("F: ");
REP(i, nn){
printf("%.3lf ", F[i]);
}
puts("");
printf("D: ");
REP(i, nn-1){
printf("%.3lf ", D[i]);
}
puts("");
printf("G: ");
REP(i, (nn-1)/2){
printf("%.3lf ", G[i]);
}
}
const int N = 1509;
DB F[N], D[N], G[N];
int nn, n, m;
int main(){
//freopen("in.txt", "r", stdin);
m = 1, nn = 1501;
REP(i, (nn-1)/2){
G[i] = DB (2*i+1) / (2*(i+1));
}
D[0] = 1;
REP(i, nn-1){
D[i+1] = D[i] * G[i/2];
++i, D[i+1] = D[i];
}
F[0] = 0;
REP(i, nn-1){
F[i+1] = F[i] + D[i];
}
REP_C(Case, RD()){
printf("Case %d: %.6lf\n", Case, F[RD()]);
}
}
Further discussion:
。。随机矩阵的最大子矩阵。。
(这个方向的推广太复杂了。。先 hold 。。。)
。。。随机序列的最大子段和。。。
(题目中可以取绝对值的限制太不自然了。。。但是去掉以后完全找不出规律。。
对数组的取值范围进行推广, {-m <= x <= m, x != 0, x 是整数}。。。
(后两个限制去掉后也变成了完全不同的问题。。)
两个弱化。。
。。只考虑前缀和 (partial sums)。。。
。。只考虑单个项目的最大值。。。
External link:
http://acm.hdu.edu.cn/showproblem.php?pid=4066
http://math.stackexchange.com/questions/139159/the-length-of-maximum-subsequence-in-a-random-sequence




Alca
Amber
Belleve Invis
Chensiting123
Edward_mj
Fotile96
Hlworld
Kuangbin
Liyaos
Lwins
LYPenny
Mato 完整版
Mikeni2006
Mzry
Nagatsuki
Neko13
Oneplus
Rukata
Seter
Sevenkplus
Sevenzero
Shirleycrow
Vfleaking
wangzhpp
Watashi
WJMZBMR
Wywcgs
XadillaX
Yangzhe
三途川玉子
About.me
Vijos
