結果

問題 No.3325 陰陽師
コンテスト
ユーザー 高橋ゆに
提出日時 2025-07-12 14:59:59
言語 PyPy3
(7.3.15)
結果
RE  
実行時間 -
コード長 1,369 bytes
コンパイル時間 195 ms
コンパイル使用メモリ 82,404 KB
実行使用メモリ 67,096 KB
最終ジャッジ日時 2025-11-01 02:52:54
合計ジャッジ時間 3,788 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other RE * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

PROBLEM_TOTAL = int(input())
SOLVE_TIMES = list(map(int, input().split()))
TIME_LIMITS = list(map(int, input().split()))

SOLVE_TIMES.sort(reverse = True)
TIME_LIMITS.sort(reverse = True)

SKIPPED = 1
BEST_TIMES =[[-1] * PROBLEM_TOTAL for is_skipped in (not SKIPPED, SKIPPED)] 

def search_best_times(skipped):
    pre_problem_i = -1
    for music_i, time_limit in enumerate(TIME_LIMITS):
        if skipped and music_i == 0:
            continue
        
        for problem_i in range(pre_problem_i + 1, PROBLEM_TOTAL):
            solve_time = SOLVE_TIMES[problem_i]
            if solve_time < time_limit:
                BEST_TIMES[skipped][music_i] = solve_time
                pre_problem_i = problem_i
                break

search_best_times(not SKIPPED)
search_best_times(SKIPPED)

def main():
    dp = [0, TIME_LIMITS[0]]
    for music_i, time_limit in enumerate(TIME_LIMITS):
        if music_i == PROBLEM_TOTAL - 1:
            break
        
        if BEST_TIMES[SKIPPED][music_i] > -1:
            dp[SKIPPED] += BEST_TIMES[SKIPPED][music_i]
        
        if music_i > 0:
            dp[SKIPPED] = max(dp[SKIPPED], dp[not SKIPPED] + time_limit)
        
        if BEST_TIMES[not SKIPPED][music_i] > -1:
            dp[not SKIPPED] += BEST_TIMES[not SKIPPED][music_i]
    
    ans = dp[SKIPPED]
    print(ans)

if  __name__ == "__main__":
    main()
0