import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class leave_15486 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int[] t = new int[n+2];
int[] p = new int[n+2];
int[] dp = new int[n+2];
for (int i = 0; i < n+2; i++){
t[i] = 0;
p[i] = 0;
dp[i] = 0;
}
for (int i = 1 ; i < n+1; i++) {
st = new StringTokenizer(br.readLine());
t[i] = Integer.parseInt(st.nextToken());
p[i] = Integer.parseInt(st.nextToken());
}
for (int i = 1; i < n+1; i++) {
if (i + t[i] <= n + 1) {
dp[i + t[i]] = Math.max(dp[i + t[i]], dp[i] + p[i]);
}
dp[i + 1] = Math.max(dp[i], dp[i+1]);
}
int max = 0;
for (int i = 0; i < n+2; i++) {
if (max < dp[i]){
max = dp[i];
}
}
System.out.println(max);
}
}
위의 코드는 주어진 일정 기간 동안 얻을 수 있는 최대 이익을 계산하는 프로그램입니다. 주어진 일정 기간 내에는 여러 작업을 수행할 수 있으며, 각 작업은 소요 시간과 해당 작업을 수행했을 때 얻을 수 있는 이익으로 표현됩니다.
로직은 다음과 같습니다:
이러한 로직을 통해 주어진 작업 정보를 기반으로 일정 기간 동안 얻을 수 있는 최대 이익을 계산할 수 있습니다.
const readline = require('readline');
let n;
let t;
let p;
let dp;
let inputT = [];
let inputP = [];
readline
.createInterface(process.stdin, process.stdout)
.on('line', (line) => {
if (!n) {
n = parseInt(line);
t = Array(n + 2).fill(0);
p = Array(n + 2).fill(0);
dp = Array(n + 2).fill(0);
} else {
const [a, b] = line.split(" ").map(Number);
inputT.push(a);
inputP.push(b);
}
})
.on('close', () => {
inputT.push(0);
inputP.push(0);
for (let i = 0; i < n + 2; i++) {
t[i] = inputT[i];
p[i] = inputP[i];
}
for (let i = 1; i < n + 1; i++) {
if (i + t[i] <= n + 1) {
dp[i + t[i]] = Math.max(dp[i + t[i]], dp[i] + p[i]);
}
dp[i + 1] = Math.max(dp[i], dp[i + 1]);
}
console.log(Math.max(...dp));
process.exit();
});
import sys
input = sys.stdin.readline
n = int(input())
t, p = [0] * (n+2), [0] * (n+2)
dp = [0] * (n+2)
for i in range(1, n+1):
t[i], p[i] = map(int, input().split())
for i in range(1, n+1):
if(i+t[i] <= n+1):
dp[i+t[i]] = max(dp[i+t[i]], dp[i] + p[i])
dp[i+1] = max(dp[i+1], dp[i])
print(max(dp))