对于这一类势能法的题,设计势能函数的时候,一定要注意 0 处的特殊情况!
为方便叙述,令 f(x) 表示 x 对应的势能。
在尝试本题中的过程中,我钦定每个 f(ai) 在变换后都减小 n1,这样总势能期望每次减小 1。然后我列出方程,先随机一个 f(1),然后顺次推出 f(1),f(2),⋯⋯
具体来说,我的方程形如:
(2k+1)F(v)−kF(v−1)−kF(v+1)=−n1
其中 k=s−1v(sv−1)。
看起来很对,但无法通过样例!
在经过三小时的痛苦调试后,我发现,势能函数这么设计是错的。因为,当 v=0 时,k=0,原式等价于 F(v)=F(v)−n1,显然无解。
为了规避这一种情况,我们大概不得不将每个都减小 n1 换成每个都减小 ∑aiai。显然,所有 i 对应的这个值之和也是 1,但此时 F(0) 有无穷多组解,可以随意取值,势能函数就是正确的。
希望能给之后做这道题的人一点儿帮助。简而言之,某些特殊参数可能造成方程无解,我们一定要设计一个合理的势能函数。