import java.util.*;
public class Main {
static int[] dy;
public int solution(int n) {
dy[1] = 1;
dy[2] = 2;
for(int i = 3; i <= n; i++) {
dy[i] = dy[i - 2] + dy[i - 1];
}
return dy[n];
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
dy = new int[n + 1];
System.out.print(T.solution(n));
}
}
import java.util.*;
public class Main {
static int[] dy;
public int solution(int n) {
dy[1] = 1;
dy[2] = 2;
for(int i = 3; i <= n + 1; i++) {
dy[i] = dy[i - 2] + dy[i - 1];
}
return dy[n];
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
dy = new int[n + 2];
System.out.print(T.solution(n));
}
}
import java.util.*;
public class Main {
static int[] dy;
public int solution(int[] arr) {
int answer = 0;
dy = new int[arr.length];
dy[0] = 1;
for(int i = 1; i < arr.length; i++) {
int max = 0;
for(int j = i - 1; j >= 0; j--) {
if(arr[j] < arr[i] && dy[j] > max) {
max = dy[j];
}
}
dy[i] = max + 1;
answer = Math.max(answer, dy[i]);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
System.out.print(T.solution(arr));
}
}
import java.util.*;
class Brick implements Comparable<Brick> {
public int s, h, w;
Brick(int s, int h, int w) {
this.s = s;
this.h = h;
this.w = w;
}
@Override
public int compareTo(Brick o) {
return o.s - this.s;
}
}
public class Main {
static int[] dy;
public int solution(ArrayList<Brick> arr) {
int answer = 0;
Collections.sort(arr);
dy[0] = arr.get(0).h;
answer = dy[0];
for(int i = 1; i < arr.size(); i++) {
int max_h = 0;
for(int j = i-1; j >= 0; j--) {
if(arr.get(j).w > arr.get(i).w && dy[j] > max_h) {
max_h = dy[j];
}
}
dy[i] = max_h + arr.get(i).h;
answer = Math.max(answer, dy[i]);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
ArrayList<Brick> arr = new ArrayList<>();
dy = new int[n];
for(int i = 0; i < n; i++) {
int a = kb.nextInt();
int b = kb.nextInt();
int c = kb.nextInt();
arr.add(new Brick(a, b, c));
}
System.out.print(T.solution(arr));
}
}
dy[i] : i 금액을 만드는 데 드는 최소 동전 개수
import java.util.*;
public class Main {
static int n, m;
static int[] dy;
public int solution(int[] coin) {
Arrays.fill(dy, Integer.MAX_VALUE);
dy[0] = 0;
for(int i = 0; i < n; i++) {
for(int j = coin[i]; j <= m; j++) {
dy[j] = Math.min(dy[j], dy[j - coin[i]] + 1);
}
}
return dy[m];
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
n = kb.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
m = kb.nextInt();
dy = new int[m + 1];
System.out.print(T.solution(arr));
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int m = kb.nextInt();
int[] dy = new int[m + 1];
for(int i = 0; i < n; i++) {
int ps = kb.nextInt();
int pt = kb.nextInt();
for(int j = m; j >= pt; j--) {
dy[j] = Math.max(dy[j], dy[j - pt] + ps);
}
}
System.out.print(dy[m]);
}
}