import java.util.*;
import java.math.BigInteger;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
BigInteger[] dp = new BigInteger[n+1];
if(n<=1){
System.out.println(1);
return;
}
if(n==1){
System.out.println(2);
return;
}
dp[1]=new BigInteger(String.valueOf(1));
dp[2]=new BigInteger(String.valueOf(2));
for(int i = 3;i<=n;i++){
dp[i] = dp[i-2].add(dp[i-1]);
}
System.out.println(dp[n]);
}
}
import java.util.*;
public class Main {
public static void main(String[] args){//只能通过80%案例
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int dist = sc.nextInt();
int[] pos = new int[n+1];
for(int i =1;i<=n;i++){
pos[i] = sc.nextInt();
}
long sum =1;
for(int i = 4;i<=n;i++){
int maxIndex = i;
for(int j = i-1;j>0;j--){
if(pos[i]-pos[j]<=dist){
maxIndex = j;
}else{
break;
}
}
if(i-maxIndex>=2){
int len = i - maxIndex;
sum=(sum+(long)(len*(len-1))/2);
}
}
System.out.println(sum%99997867);
}
}
class Solution {
public int translateNum(int num) {
String str = String.valueOf(num);
int n = str.length();
int[] dp = new int[n+1];
dp[0] = dp[1] = 1;
for(int i = 2;i<=n;i++){
int digit = Integer.parseInt(str.substring(i-2,i));
if(digit<=25&&digit>=10){
dp[i] = dp[i-2]+dp[i-1];
}else{
dp[i] = dp[i-1];
}
}
return dp[n];
}
}
//方法2 递归求解
public int translateNum(int num) {
if(num<=9){
return 1;
}
if(num%100<=25&&num%100>=10){
return translateNum(num/100)+translateNum(num/10);
}else{
return translateNum(num/10);
}
}
序列模式匹配
方法一.暴力求解
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String[] arr = sc.nextLine().trim().split(" ");
int l=-1,r=-1,d = Integer.MAX_VALUE;
for(int i = 0;i<=arr[0].length()-arr[1].length();i++){
int index = 0;
if(arr[1].charAt(index)==arr[0].charAt(i)){
int tl = i,tr=-1;
for(int j = i;j<arr[0].length();j++){
if(arr[1].charAt(index)==arr[0].charAt(j)){
index++;
if(index==arr[1].length()){
tr=j;
if(tr-tl<d){
d = tr-tl;
l = tl;
r=tr;
}
break;
}
}
}
}
}
System.out.println(l+" "+r);
}
}
}
//回溯法 通过率只有70%
import java.util.*;
public class Main{
static int mark = 0;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0;i<arr.length;i++){
arr[i]=sc.nextInt();
}
int price = sc.nextInt();
helper(arr,new int[n],price);
System.out.println(mark);
}
public static void helper(int[] arr,int[] flag,int price){
if(mark==1||price<0){
return;
}
if(price==0){
mark = 1;
return;
}
for(int i = 0;i<arr.length;i++){
if(flag[i]==1){
continue;
}
flag[i]=1;
price-=arr[i];
helper(arr,flag,price);
price+=arr[i];
flag[i]=0;
}
}
}
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0;i<arr.length;i++){
arr[i]=sc.nextInt();
}
int price = sc.nextInt();
boolean[][] dp = new boolean[n][price+1];
dp[0][0]=true;
for(int j =1;j<=price;j++){
if(arr[0]==j){
dp[0][j]=true;
}
}
for(int i =1;i<n;i++){
for(int j =0;j<=price;j++){
dp[i][j]=dp[i-1][j];
if(j>=arr[i]){
dp[i][j]=dp[i][j]||dp[i-1][j-arr[i]];
}
}
}
System.out.println(dp[n-1][price]?1:0);
}
}