如何用Java解决对于一个排列 A=(a1,a2,⋅⋅⋅,an) ,定义价值 ci 为 a1 至 ai−1 中小于 ai 的数的个数,即 bi=|{aj|j<i,aj<ai}|。 定义 A 的价值为 ∑i=1nci。 给定 n,求 1 至 n 的全排列中所有排列的价值之和。 输入格式 输入一行包含一个整数 n。
时间: 2023-02-09 22:38:13 浏览: 170
MAX SUM {a1,a2,…,an},求该序列形如ai+ai+1,…,+aj的子段和的最大值
5星 · 资源好评率100%
要解决这个问题,可以利用递推的方式。
我们设 sum[i] 表示前 i 个数的排列的价值之和,那么对于第 i 个数,它可以放在第 1 到第 i 个位置。
当第 i 个数放在第 j 个位置时,它会增加 sum[j-1] 的价值。
所以状态转移方程为:sum[i] = sum[i-1] * i + sum[i-1]
下面是 Java 代码的实现:
```
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long[] sum = new long[n+1];
sum[0] = 1;
for (int i = 1; i <= n; i++) {
sum[i] = sum[i-1] * i + sum[i-1];
}
System.out.println(sum[n]);
}
}
```
阅读全文