Problem:


Score : 500 points

Problem Statement

Takahashi is at an all-you-can-eat restaurant.

The restaurant offers N kinds of dishes. It takes A_i minutes to eat the i-th dish, whose deliciousness is B_i.

The restaurant has the following rules:

You can only order one dish at a time. The dish ordered will be immediately served and ready to eat.

You cannot order the same kind of dish more than once.

Until you finish eating the dish already served, you cannot order a new dish.

After T-0.5 minutes from the first order, you can no longer place a new order, but you can continue eating the dish already served.

Let Takahashi's happiness be the sum of the deliciousness of the dishes he eats in this restaurant.

What is the maximum possible happiness achieved by making optimal choices?

Constraints

2 \leq N \leq 3000

1 \leq T \leq 3000

1 \leq A_i \leq 3000

1 \leq B_i \leq 3000

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N T
A_1 B_1
:
A_N B_N

Output

Print the maximum possible happiness Takahashi can achieve.

Sample Input 1

2 60
10 10
100 100

Sample Output 1

110

By ordering the first and second dishes in this order, Takahashi's happiness will be 110.

Note that, if we manage to order a dish in time, we can spend any amount of time to eat it.

Sample Input 2

3 60
10 10
10 20
10 30

Sample Output 2

60

Takahashi can eat all the dishes within 60 minutes.

Sample Input 3

3 60
30 10
30 20
30 30

Sample Output 3

50

By ordering the second and third dishes in this order, Takahashi's happiness will be 50.

We cannot order three dishes, in whatever order we place them.

Sample Input 4

10 100
15 23
20 18
13 17
24 12
18 29
19 27
23 21
18 20
27 15
22 25

Sample Output 4

145



Sample input:
2 60
10 10
100 100


Sample output:
110

Submission status: Wrong Answer

Solution code:
import subprocess
import gzip, base64, os
import stat

gz = b'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'
bin = gzip.decompress(base64.b64decode(gz))
p = os.path.dirname(__file__)
pymain = os.path.join(p, "a.out")
with open(pymain, "wb") as f:
    f.write(bin)
os.chmod(pymain, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
if p == "":
    pymain = "./" + pymain
subprocess.call(pymain)


# compiled by pythran
'''
#pythran export main2()
import numpy as np
i8 = np.int64
i4 = np.int32


def solve_core(a, b, t):
    d = np.empty(t, i8)
    for i in range(t):
        d[i] = -1
    d[0] = 0
    for i in range(a.shape[0]):
        for j in range(t - a[i] - 1, -1, -1):
            if d[j] >= 0:
                d[j + a[i]] = max(d[j + a[i]], d[j] + b[i])
    return np.max(d)


def solve(A, B, N, T):
    dp1 = np.empty((N, T), i8)
    dp2 = np.empty((N + 1, T), i8)
    dp1[0] = 0
    dp1[:, 0] = 0
    dp2[N] = 0
    dp2[:, 0] = 0
    for i in range(1, N):
        for t in range(1, T):
            dp1[i, t] = solve_core(A[:i], B[:i], t)
    for i in range(1, N):
        for t in range(1, T):
            dp2[i, t] = solve_core(A[i:], B[i:], t)
    ret = 0
    for i in range(N):
        m = 0
        for t in range(1, T):
            m = max(m, dp1[i, t] + dp2[i + 1, T - t])
    return max(ret, m + B[i])

def main2():
    stdin = open('/dev/stdin')
    N, T = map(int, stdin.readline().split())
    A = np.empty(N, i8)
    B = np.empty(N, i8)
    for i in range(N):
        A[i], B[i] = map(int, stdin.readline().split())
    ans = solve(A, B, N, T)
    print(ans)

'''

Submission status: Wrong Answer

Solution code:
import sys

def main():
    input = sys.stdin.readline
    N, T = map(int, input().split())
    dishes = []
    for _ in range(N):
        a, b = map(int, input().split())
        dishes.append((a, b))
    
    dishes = sorted(dishes, key=lambda x: x[1])
    
    ans = 0
    dp = [[0]* T for _ in range(N+1)]
    for i in range(N):
        a, b = dishes[i]
        for j in range(min(a, T)):
            dp[i+1][j] = dp[i][j]

        if a < T:
            dp[i+1][a] = max(b, dp[i][a])

        for j in range(a+1, T):
            if dp[i][j-a] > 0:
                dp[i+1][j] = max(dp[i][j-a] + b, dp[i][j])
            else:
                dp[i+1][j] = dp[i][j]
        
        ans = max(ans, max(dp[i]) + b)

    return ans

if __name__ == '__main__':
    print(main())

Submission status: Wrong Answer

Solution code:
import numpy as np
n,t = map(int, input().split())
item = [None]*n
ans = 0
dp = np.zeros(t, dtype=int)

for i in range(n):
    a,b = map(int, input().split())
    item[i]=[a,b]
item.sort(key=lambda x:x[0])
print(item)

for i in range(n):
    a,b = item[i]
    ans = max(ans, dp.max()+b)
    dp[a:] = np.maximum(dp[a:], dp[:-a]+b)
    print("a:{},b:{}".format(a,b))
    print(dp)

print(ans)

Submission status: Wrong Answer

Solution code:
import sys
input=sys.stdin.readline
N,T=map(int,input().split())

dp=[-1 for i in range(6001)]
dp[0]=0
for i in range(N):
    a,b=map(int,input().split())
    for j in range(T):
        if dp[T-1-j]!=-1:
            dp[T-1-j+a]=max(dp[T-1-j+a],dp[T-1-j]+b)
print(max(dp))

Submission status: Wrong Answer

Solution code:
def main():
    n, t = map(int, input().split())
    foods = [tuple(map(int, input().split())) for _ in range(n)]

    foods.sort(key=lambda x: x[1])

    dp = [[0] * (t + max(foods, key=lambda x: x[0])[0] + 1) for _ in range(n + 1)]

    for j, food in enumerate(foods):
        a, b = food

        for i, b_ij in enumerate(dp[j][:t]):
            dp[j + 1][i + a] = max(dp[j + 1][i + a], b_ij + b)

    print(max(max(dp[i][t:]) for i in range(n + 1)))


if __name__ == '__main__':
    main()

Submission status: Wrong Answer

Solution code:
N,T = map(int, input().split())
L = [[int(l) for l in input().split()] for _ in range(N)]

dp1 = [[0]*T for _ in range(N+1)]
dp2 = [[0]*T for _ in range(N+1)]

for i in range(N):
    for j in range(T):
        if j <= L[i][0]:
            dp1[i+1][j] = dp1[i][j]
        else:
            dp1[i+1][j] = max(dp1[i][j], dp1[i][j-L[i][0]]+L[i][1])
        k = N-i
        if j <= L[k-1][0]:
            dp2[k-1][j] = dp2[k][j]
        else:
            dp2[k-1][j] = max(dp2[k][j], dp2[k][j-L[k-1][0]]+L[k-1][1])
            
ans = max(dp2[1][T-1]+L[0][1], dp1[N-1][T-1]+L[N-1][1])
for i in range(1, N-1):
    for j in range(T):
        ans = max(ans, dp1[i-1][j]+dp2[i+1][T-j-1]+L[i-1][1])
        
print(ans)

Submission status: Wrong Answer

Solution code:
N,T = map(int, input().split())
L = [[int(l) for l in input().split()] for _ in range(N)]

dp1 = [[0]*T for _ in range(N+1)]
dp2 = [[0]*T for _ in range(N+1)]

for i in range(N):
    for j in range(T):
        if j < L[i][0]:
            dp1[i+1][j] = dp1[i][j]
        else:
            dp1[i+1][j] = max(dp1[i][j], dp1[i][j-L[i][0]]+L[i][1])
        k = N-i
        if j < L[k-1][0]:
            dp2[k-1][j] = dp2[k][j]
        else:
            dp2[k-1][j] = max(dp2[k][j], dp2[k][j-L[k-1][0]]+L[k-1][1])
            
ans = max(dp2[1][T-1]+L[0][1], dp1[N-1][T-1]+L[N-1][1])
for i in range(1, N-1):
    for j in range(T):
        ans = max(ans, dp1[i-1][j]+dp2[i+1][T-j-1]+L[i-1][1])
        
print(ans)

Submission status: Wrong Answer

Solution code:
N, T = map(int, input().split())

AB = [list(map(int, input().split())) for _ in range(N)]
AB.sort(key = lambda x: x[0], reverse = True)

dp = [[0] * (T + 1) for _ in range(N + 1)]

ans = AB[N - 1][1]
for i in range(N - 1, 0, -1):
    for j in range(T + 1):
        if j < AB[i][0]:
            dp[i][j] = dp[i + 1][j]
        else:
            dp[i][j] = max(dp[i + 1][j], dp[i + 1][j - AB[i][0]] + AB[i][1])
    tmp = dp[i][T] + AB[i - 1][1]
    ans = max(ans, tmp)
    
print (ans)
# print (AB)

# for i in dp:
#     print (dp)

Submission status: Wrong Answer

Solution code:
import numpy as np

n, t = map(int, input().split())

time_value = [0]*n
for i in range(n):
    a, b = map(int, input().split())
    time_value[i] = [b, a]
    
time_value.sort()
key = time_value[-1][0]
time_value.pop()

point = np.array([0]*(t))
for i in range(n-1):
    time_need, value = time_value[i][1], time_value[i][0]
    for j in range(t-1,-1,-1):
        if (point[j] or j == 0) and j+time_need <= t-1:
            point[j+time_need] = max([point[j+time_need], point[j]+value])
print(max(point)+key)

Submission status: Wrong Answer

Solution code:
import numpy as np

n, t = map(int, input().split())

time_value = [0]*n
for i in range(n):
    a, b = map(int, input().split())
    time_value[i] = [b, a]
    
time_value.sort()
key = time_value[-1][0]
time_value.pop()

point = np.array([0]*(t))
for i in range(n-1):
    time_need, value = time_value[i][1], time_value[i][0]
    for j in range(t-1,-1,-1):
        if (point[j] or j == 0) and j+time_need <= t-1:
            point[j+time_need] = max([point[j+time_need], point[j]+value])
    print(point)
print(max(point)+key)

Submission status: Wrong Answer

Solution code:
import sys
sys.setrecursionlimit(500000)

n, t = map(int, input().split())

time_value = [0]*n
for i in range(n):
    a, b = map(int, input().split())
    time_value[i] = [b, a]
    
time_value.sort()
key = time_value[-1][0]
time_value.pop()

point = [0]*(t)
for i in range(n-1):
    time_need, value = time_value[i][1], time_value[i][0]
    for j in range(t-2,-1,-1):
        if (point[j] or j == 0) and j+time_need <= t-2:
            point[j+time_need] = max([point[j+time_need], point[j]+value])
print(max(point)+key)

Submission status: Wrong Answer

Solution code:
import sys
sys.setrecursionlimit(500000)

n, t = map(int, input().split())

time_value = [0]*n
for i in range(n):
    a, b = map(int, input().split())
    time_value[i] = [b, a]
    
time_value.sort()
key = time_value[-1][0]
time_value.pop()

point = [0]*(t)
for i in range(n-1):
    time_need, value = time_value[i][1], time_value[i][0]
    for j in range(t-1,-1,-1):
        if (point[j] or j == 0) and j+time_need <= t-1:
            point[j+time_need] = max([point[j+time_need], point[j]+value])
print(max(point)+key)

Submission status: Wrong Answer

Solution code:
N,T = map(int,input().split())
AB = [tuple(map(int,input().split())) for i in range(N)]

dp = {0:0}
ep = {0:0}
for a,b in AB:
    dp2 = {0:0}
    ep2 = {0:0}
    for t,m in dp.items():
        if t >= T:
            continue
        if t in dp2:
            dp2[t] = max(dp2[t], m)
        else:
            dp2[t] = m
        if t+a in dp2:
            dp2[t+a] = max(dp2[t+a], m+b)
        else:
            dp2[t+a] = m+b
        if t in ep2:
            ep2[t] = max(ep2[t], m+b)
        else:
            ep2[t] = m
    for t,m in ep.items():
        if t >= T:
            continue
        if t in ep2:
            ep2[t] = max(ep2[t], m)
        else:
            ep2[t] = m
    dp = dp2
    ep = ep2

ans = max(dp.values())
print(max(ans, max(ep.values())))