第一题
class Solution {
public int fib(int n) {
List list=new ArrayList<Integer>();
if(n==0){
return 0;
}else if(n==1){
return 1;
}else{
list.add(0);
list.add(1);
for(int i=2;i<=n;i++){
list.add((int)list.get(i-2)+(int)list.get(i-1));
}
return (int)list.get(n);
}
}
}
第二题
class Solution {
public int tribonacci(int n) {
if(n==0){
return 0;
}
if(n<=2){
return 1;
}
int a=0,b=1,c=1;
int res=0;
for(int i=3;i<=n;++i){
res=a+b+c;
a=b;
b=c;
c=res;
}
return res;
}
}
第三题
class Solution {
public int climbStairs(int n) {
int[] dp=new int[n+1];
dp[0]=1;
dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
}
第四题
class Solution {
public int minCostClimbingStairs(int[] cost) {
int len;
len=cost.length;
int dp[]=new int[len+3];
dp[0]=0;
dp[1]=0;
for(int i=2;i<dp.length-1;i++){
dp[i]=cost[i-2]+Math.min(dp[i-1],dp[i-2]);
}
dp[dp.length - 1] = Math.min(dp[dp.length - 3], dp[dp.length - 2]) + 0;
return dp[dp.length - 1];
}
}
第五题
class Solution {
public int maxProfit(int[] prices) {
if(prices.length==0) return 0;
int min=prices[0],max=min,res=0;
for(int i=1;i<prices.length;i++){
if(prices[i]<min){
min=prices[i];
max=min;
}else if(prices[i]>max) max=prices[i];
if(max-min>res) res=max-min;
}
return res;
}
}
第六题
class Solution {
public int longestCommonSubsequence(String text1, String text2) {
int l1=text1.length();
int l2=text2.length();
int[][] dp=new int[l1+1][l2+2];
for(int i=0;i<l1;i++){
dp[i][0]=0;
}
for(int j=0;j<l2;j++){
dp[0][j]=0;
}
for(int i=1;i<=l1;i++){
for(int j=1;j<=l2;j++){
if(text1.charAt(i-1)==text2.charAt(j-1)){
dp[i][j]=dp[i-1][j-1]+1;
}else{
dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);
}
}
}
return dp[l1][l2];
}
}
第七题
import java.util.Scanner;
public class triangle{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
long n;
while(scanner.hasNext()){
System.out.println((solve(scanner.nextLong())));
}
}
public static long solve(long n){
long res=0l;
long san[]=new long[50010];
san[1]=1;
if(n==1) return 1;
long cur=0l;
for(int i=2;i<50000;i++){
cur+=2*i-1;
for(int j=i;j>=1;j--){
san[j]=san[j-1]+san[j];
if(san[j]==n) res=cur;
cur--;
}
if(res!=0) return res;
}
return (n+1)*n/2+2;
}
}
第八题
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class selectNode{
private static int[][] dp;
private static List<List<Integer>> vertex = new ArrayList<>();
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
dp = new int[n][2];
for (int i = 0; i < n; i++) {
dp[i][1]=scanner.nextInt();
vertex.add(new ArrayList<Integer>());
}
scanner.nextLine();
for (int i = 0; i < n - 1; i++) {
final String[] ab =scanner.nextLine().split(" ");
int a = Integer.parseInt(ab[0]) - 1;
int b = Integer.parseInt(ab[1]) - 1;
vertex.get(a).add(b);
vertex.get(b).add(a);
}
scanner.close();
dfs(0, -1);
System.out.println(Math.max(dp[0][0], dp[0][1]));
}
private static void dfs(int root, int pre) {
List<Integer> temp = vertex.get(root);
for (int i = 0; i < temp.size(); i++) {
if (temp.get(i) != pre) {
dfs(temp.get(i), root);
dp[root][1] += dp[temp.get(i)][0];
dp[root][0] += Math.max(dp[temp.get(i)][0], dp[temp.get(i)][1]);
}
}
}
}
第九题
import java.util.Scanner;
public class drop{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[] arr=new int[1000];
int ans=1;
for(int i=0;ans<n;i++){
ans=i+ans;
arr[i]=ans;
}
ans=1;
int count=0;
for (int i=0;ans<n;i++){
ans=arr[i]+ans;
count++;
}
System.out.println(count);
}
}
第十题
import java.util.Scanner;
public class K{
public static int change10(int n,int k){
int k1=1;
int sum=0;
String str1=String.valueOf(n);
for(int i=0;i<str1.length();i++){
sum+=n%10*k1;
n/=10;
k1*=k;
}
return sum;
}
public static String changek(int n,int k){
String str1="";
while(n>=k){
str1+=String.valueOf(n%k);
n=n/k;
}
str1+=String.valueOf(n);
return str1;
}
public static boolean panduan(String str1){
boolean result=true;
char []ch1=str1.toCharArray();
for(int i=0;i<ch1.length-1;i++){
if(Integer.parseInt(String.valueOf(ch1[i]))-Integer.parseInt(String.valueOf(ch1[i+1]))==1 ||
Integer.parseInt(String.valueOf(ch1[i]))-Integer.parseInt(String.valueOf(ch1[i+1]))==-1){
result=false;
break;
}
}
return result;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int k=sc.nextInt();
int l=sc.nextInt();
int k1=1;
int count=0;
int start=1;
int end=0;
if(l==1) start=0;
else{
for(int i=0;i<l-1;i++) start*=10;
}
start=change10(start, k);
for(int i=0;i<l;i++){
end+=(k-1)*k1;
k1*=10;
}
end=change10(end, k);
for(int i=start;i<end+1;i++){
String n=changek(i, k);
if(panduan(n)){
count++;
}
}
System.out.println(count%1000000007);
}
}