【蓝桥杯省赛】冲刺练习题【动态规划】倒计时【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取模
樣例輸入
樣例輸出
4樣例輸入
5樣例輸出
13范圍
1<=n<=1000000
代碼實現:
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網格,請找出一條從左上角到右下角的路徑,
使得路徑上的數字總和為最小。
說明:每次只能向下或者向右移動一步。
輸入樣例
輸出樣例
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”的子序列
兩個字符串公共子序列是這兩個字符串所共同擁有的子序列。
樣例輸入
樣例輸出
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】天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础——PyCharm版本—
- 下一篇: Python基础——PyCharm版本—