結果
問題 |
No.1867 Partitions and Inversions
|
ユーザー |
![]() |
提出日時 | 2025-06-12 21:37:37 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,905 bytes |
コンパイル時間 | 401 ms |
コンパイル使用メモリ | 81,976 KB |
実行使用メモリ | 295,672 KB |
最終ジャッジ日時 | 2025-06-12 21:40:09 |
合計ジャッジ時間 | 7,655 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 3 |
other | WA * 2 TLE * 1 -- * 62 |
ソースコード
import sys def main(): sys.setrecursionlimit(1 << 25) N = int(sys.stdin.readline()) P = list(map(int, sys.stdin.readline().split())) # 预处理每个可能的区间[i, j]的排序后的数组 sorted_intervals = [[P[i]] for i in range(N)] for i in range(N): for j in range(i+1, N): sorted_intervals[j] = sorted(sorted_intervals[j-1] + [P[j]]) # 预处理每个区间[i, j]排序后的数组的元素 # 这里可能需要更高效的方式,比如直接排序区间[i, j] # 预处理所有可能的区间[i, j]的排序后的数组 # 注意:区间i到j是从i到j的元素,包括j sorted_list = [[0] * N for _ in range(N)] for i in range(N): current = [] for j in range(i, N): current.append(P[j]) current_sorted = sorted(current) sorted_list[i][j] = current_sorted.copy() # 预处理每个区间[i, j]排序后的数组 # 现在,对于每个分割方式,计算总逆序数 # 由于时间限制,这里可能无法处理所有情况,只能给出一个示例代码 # 这里可能需要优化,动态规划的状态转移方程可能需要重新设计 # 初始化dp表 INF = float('inf') dp = [[INF] * (N+1) for _ in range(N+1)] dp[0][0] = 0 # 前0个元素分割成0个区间,逆序数为0 for k in range(1, N+1): for i in range(1, N+1): for j in range(0, i): # 将区间j+1到i分割成一个区间,排序后的数组为sorted_list[j][i-1] # 计算这个区间与前面分割的k-1个区间之间的逆序数之和 # 这里无法直接计算,可能需要预处理 # 因此,这个方法可能不可行 pass # 输出结果 for k in range(1, N+1): print(dp[k][N]) if __name__ == "__main__": main()