寻找数列(构造+拓扑)
寻找一个有n个整数的数列,满足下列条件:
其中任意连续p个数之和是正数。
其中任意连续q个数之和是负数。
若无法找到,则输出"No",否则输出一个数值最小的数列。
输入 n p q
输出 n个整数
样例:
输入:
5 4 3
输出:
2 2 -5 2 2
设: si——数列前i个数之和。
所以有
s[i]=a[1]+a[2]+...+a[i]
s[0]=0;
s[i+p]-s[i]>0 s[i+p]>s[i]
s[i+q]-s[i]<0 s[i+q]<s[i]
构图:
点——i (0..n)
权——s[i]
边——当s[i]>s[j]时 有(i,j)
如n,p,q=6,5,3
s[i]>s[i+3]
s[i+5]>s[i]
拓扑号: 0 1 2 3 4 5 6
2 5 0 3 6 1 4
↑ 这个我们知道。 而要最小、 所以往前一次递增,往后依次递减。
s[i] : 2 1 0 -1 -2 -3 -4
a[i]=s[i]-s[i-1]: 1 2 3 4 5 6
-3 5 -3 -3 5 -3
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)