結果
問題 | No.1858 Gorgeous Knapsack |
ユーザー |
![]() |
提出日時 | 2022-02-28 23:59:59 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,306 ms / 2,000 ms |
コード長 | 1,574 bytes |
コンパイル時間 | 134 ms |
コンパイル使用メモリ | 82,384 KB |
実行使用メモリ | 468,472 KB |
最終ジャッジ日時 | 2024-07-07 03:14:57 |
合計ジャッジ時間 | 12,501 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 37 |
ソースコード
import sys#input = sys.stdin.readlineinput = sys.stdin.buffer.readline #文字列はダメ#sys.setrecursionlimit(1000000)#import bisect#import itertools#import random#from heapq import heapify, heappop, heappush#from collections import defaultdict#from collections import deque#import copy#import math#from functools import lru_cache#@lru_cache(maxsize=None)#MOD = pow(10,9) + 7#MOD = 998244353#dx = [1,0,-1,0]#dy = [0,1,0,-1]def main():N,M = map(int,input().split()); INF = pow(10,18)V = []; W = []; Z = []for i in range(N):v,w = map(int,input().split())V.append(v)W.append(w)Z.append((v,w))#宝石がの美しさが大きい順Z.sort(reverse=True)#print(Z)#dp[i][j]:i番目を使って重さがjの時の美しさの総和の最大値dp = [[-INF]*(M+1) for _ in range(N+1)]dp[0][0] = 0#dps[i]:i番以下における重さがjの時の美しさの総和最大値dps = [[-INF]*(M+1) for _ in range(N+1)]dps[0][0] = 0for i in range(N):vi = Z[i][0]; wi = Z[i][1]#print(vi,wi)for j in range(M+1):nj = j + wiif nj <= M:dp[i+1][nj] = max(dp[i+1][nj], dps[i][j] + vi)for j in range(M+1):dps[i+1][j] = max(dps[i][j], dp[i+1][j])#print(dp[i+1])#print(dps[i+1])ans = 0for i in range(N):for j in range(M+1):temp = dp[i+1][j] * Z[i][0]ans = max(ans, temp)print(ans)if __name__ == '__main__':main()