日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【蓝桥杯省赛】冲刺练习题【动态规划】倒计时【08】天

發布時間:2024/8/26 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【蓝桥杯省赛】冲刺练习题【动态规划】倒计时【08】天 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??🙏🤗距離【第十三屆藍橋杯4月9日省賽】僅剩【08天】🤗🙏

📋今日題型:【動態規劃】(周新杰提供)📋

??🤗循環是一切暴力的基礎,暴力基礎,轉起來。🤗??

🤗國一鎮樓🤗

📋比賽題目與分數比例📋

確認范圍:

結果填空題5道,共計45分。

程序設計題5道,共計105分。

??🤗刷題安排🤗??

日期題目類型題目數量
3月25日循環6
3月26日超大數6
3月27日數組6
3月28日枚舉6
3月29日遞歸6
3月30日繪圖6
3月31日深搜廣搜5
4月1日動態規劃5
4月2日填空題5
4月3日數學公式:查詢準考證5
4月4日第十屆省賽題10
4月5日第十一屆省賽題10
4月6日第十二屆省賽1套題10
4月7日第十二屆省賽2套題10
4月8日經典題目練習8
4月9日9點考試

目錄

1、三步問題

2、連續數列

3、打家劫舍

4、不同路徑

5、最小路徑和

附加題(超經典題目,建議不會的背下來公式):


1、三步問題

有個小孩正在上樓梯,樓梯有n階臺階,小孩每次可以上1階、兩階或者三階。
計算小孩有多少種上樓梯的方式。結果可能很大,你需要對1000000007取模
樣例輸入

3

樣例輸出

4

樣例輸入

5

樣例輸出

13

范圍
1<=n<=1000000
代碼實現:

import java.util.Scanner; public class dp_1 { //三步問題public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();int[] dp=new int[n+3];dp[1]=1;dp[2]=2;dp[3]=4;for (int i = 4; i <= n; i++) {dp[i]=(dp[i-1]+dp[i-2]+dp[i-3])%1000000007;}System.out.println(dp[n]);} }

2、連續數列

給定一個整數數組,找出總和最大的連續數列

樣例輸入

[-2,1,-3,4,-1,2,1,-5,4]

樣例輸出

6

當連續的子數組為[4,-1,2,1]時最大

import java.util.Arrays; import java.util.Scanner;public class demo { //連續數列public static void main(String[] args) {Scanner sc=new Scanner(System.in);String str=sc.nextLine();str=str.substring(1,str.length()-1);String[] a=str.split(",");int[] dp=new int[a.length];//字符串數組轉int數組int[] s=Arrays.stream(a).mapToInt(Integer::parseInt).toArray();dp[0]=s[0];int max=s[0];for (int i = 1; i < a.length; i++) {dp[i]=Math.max(dp[i-1]+s[i], s[i]);max=Math.max(max, dp[i]);}System.out.println(max);} }

3、打家劫舍

你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,
影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,
如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。
現在給定一個代表每個房屋存放金額的非負整數數組,計算你在不觸動報警裝置的情況下,
能偷竊到的最高金額。

樣例輸入

[1,2,3,1]

樣例輸出

4

樣例輸入

[2,7,9,3,1]

樣例輸出

12 import java.util.Arrays; import java.util.Scanner; public class demo { //打家劫舍public static void main(String[] args) {Scanner sc=new Scanner(System.in);String str=sc.nextLine();if(str.length()==0) {System.out.println(0);return;}if(str.length()==1) {System.out.println(str);return;}str=str.substring(1,str.length()-1);String[] a=str.split(",");int[] s=Arrays.stream(a).mapToInt(Integer::parseInt).toArray();int[] dp=new int[a.length];dp[0]=s[0];dp[1]=Math.max(dp[0], s[1]);for (int i = 2; i < a.length; i++) {dp[i]=Math.max(dp[i-1], dp[i-2]+s[i]);}System.out.println(dp[s.length-1]);}}

4、不同路徑

不同路徑
一個機器人位于一個m*n網格的左上角機器人每次只能向下或者向右移動一步。
機器人視圖達到網格的右下角,問總共有多少條不同的路徑?

樣例輸入

3 2

樣例輸出

3

樣例輸入

7 3

樣例輸出

28

代碼實現

import java.util.Scanner; public class demo { //不同路徑public static void main(String[] args) {Scanner sc=new Scanner(System.in);int m=sc.nextInt();int n=sc.nextInt();int[][] dp=new int[m][n];for (int i = 0; i < n; i++)dp[0][i]=1;for (int i = 0; i < m; i++)dp[i][0]=1;for (int i = 1; i < dp.length; i++) {for (int j = 1; j < dp[i].length; j++) {dp[i][j]=dp[i-1][j]+dp[i][j-1];}}System.out.println(dp[m-1][n-1]);}}

5、最小路徑和

最小路徑和
給定一個包含非負數整數的m*n網格,請找出一條從左上角到右下角的路徑,
使得路徑上的數字總和為最小。
說明:每次只能向下或者向右移動一步。


輸入樣例

3 3 1 3 1 1 5 1 4 2 1

輸出樣例

7 import java.util.Scanner; public class dp_5 { //最小路徑和public static void main(String[] args) {Scanner sc=new Scanner(System.in);int m=sc.nextInt();int n=sc.nextInt();int[][] a=new int[m][n];for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[i].length; j++) {a[i][j]=sc.nextInt();}}int[][] dp=new int[m][n];dp[0][0]=a[0][0];for (int i = 1; i < m; i++)dp[0][i]=dp[0][i-1]+a[0][i];for (int i = 1; i < n; i++)dp[i][0]=dp[i-1][0]+a[i][0];for (int i = 1; i < dp.length; i++) {for (int j = 1; j < dp.length; j++) {dp[i][j]=Math.min(dp[i-1][j], dp[i][j-1])+a[i][j];}}System.out.println(dp[m-1][n-1]);}}

附加題(超經典題目,建議不會的背下來公式):

最長公共子序列
給定兩個字符串text1和text2,返回這兩個字符串的最長公共子序列的長度。
如果不存在公共子序列則返回0.
一個字符串的子序列是指這樣一個新的字符串:它是由原字符串在不變字符串的相對順序情況下刪除某些字符后組成的新字符串。
例如“ace”是“abcde”的子序列,但是“aec”不是“abcde”的子序列
兩個字符串公共子序列是這兩個字符串所共同擁有的子序列。
樣例輸入

abcde ace

樣例輸出

3

樣例輸入

abc abc

樣例輸出

3 import java.util.Scanner; public class dp_6 { //最長公共子序列public static void main(String[] args) {Scanner sc=new Scanner(System.in);String text1=sc.nextLine();String text2=sc.nextLine();int[][] dp=new int[10000][10000];for (int i = 1; i <= text1.length(); i++) {for (int j = 1; j <= text2.length(); 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]);}}}System.out.println(dp[text1.length()][text2.length()]);}}

總結

以上是生活随笔為你收集整理的【蓝桥杯省赛】冲刺练习题【动态规划】倒计时【08】天的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。