藍橋杯練習題2

動態規劃

動態規劃三大題型:計數問題、最值問題、存在性問題;

【最小權值】-- 最值問題

【題目分析】

import?java.util.Arrays;

Arrays類中的一個方法:Arrays.fill(int[] m,int n)

//給 int 類型(或者char類型/Long類型...)的數組全部空間填充上數字 n ;

Arrays.fill(int[] m,int start_index,int end_index,int n)

//在數組 m 的 start_index(包含該起始索引,可以取0)到 end_index(不包含該索引,最大到m.length) 填充數字n ;?

import java.util.Scanner;
// 1:無需package
// 2: 類名必須Main, 不可修改
import java.util.Arrays;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//從0-2021long[] dp = new long[2022];//dp儲存的是不同結點數量時的最小權值Arrays.fill(dp,-1);//空子樹權值是0 無根節點dp[0] = 0;//dp[1]是有一個結點(根結點)的最小權值dp[1] = 1;//i是該樹所有結點的個數//i從2到2021for(int i=2;i<dp.length;i++){long min = Long.MAX_VALUE;//j=left 是該樹左結點的個數//i-j-1=right 是該樹的右結點for(int j=0;j<i;j++){int left = j;int right = i - j - 1;  //1是根節點long temp = 1 + 2*dp[left] + 3*dp[right] + left*left*right;min = Math.min(min,temp);}dp[i] = min;}System.out.println(dp[2021]);scan.close();}
}
【砝碼稱重】--?計數問題

import java.util.Scanner;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int num = 0;//代表重量的種類//題目有提示N的范圍[1,100] 總重量不超過100000int N = scan.nextInt();int[] w = new int[101];  //使用w[1]到w[100]//默認全是false;boolean[][] dp = new boolean[101][100001];   //使用[1...100]和[1...100000]  long weight = 0L;for(int i = 1;i< N+1;i++){//初始化w[1]到w[N]w[i] = scan.nextInt();weight+=w[i];//所有情況中最大的砝碼重量}/*核心代碼*///放第i個砝碼 i=1...Nfor(int i=1;i<N+1;i++){for(int j=1;j<=weight;j++){if(j==w[i]){dp[i][j] = true;  //能夠稱出的重量賦T;//dp[0][1...max]在初始化的時候默認是F;}else{//設定放左邊總重量減少 右邊總重量增加//前 i 個砝碼可以不可以稱出 j ?考慮以下情況//1.如果dp[i-1][j]=T;上一個砝碼已經可以稱出 j 這個重量; 第 i 個砝碼不放了;//2.dp[i-1][abs(j-w[i])];上一個砝碼(前i-1個)已經可以稱出 j-w[i] ,那么第i個砝碼(放右邊)就可以稱出 j 重量。dp[i][j]=T; //3.dp[i-1][j+w[i]];上一個砝碼(前i-1個)已經可以稱出 j+w[i],那么第i個砝碼(放左邊)就可以稱出 j 重量,dp[i][j]=T; dp[i][j] = dp[i-1][j] || dp[i-1][Math.abs(j-w[i])] || dp[i-1][j+w[i]];}}}for(int i=1;i<=weight;i++){if(dp[N][i]){num++;}}System.out.println(num);scan.close();}
}
【序列】

?

package test;import java.math.BigInteger;
import java.util.HashSet;
import java.util.Scanner;
import java.util.*;
import java.lang.*;public class test2 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int N = scan.nextInt();int[] a = new int[N];int[] b = new int[N];int[] S = new int[N + 1];int sum = 0;for (int m : a) {m = scan.nextInt();}for(int i=0;i<N;i++) {a[i]=scan.nextInt();}int num = 0;// 首項&公差=jfor (int j = 1; j < N + 1; j++) {b[0] = j;//初始化數組bfor (int k = 1; k < N; k++) {b[k] = b[k - 1] + j;}for (int i = 0; i < N; i++) {if (b[i] % a[i] == 0) {num++;}}S[j] = num;num=0;}sum = 0;for (int i = 1; i < N + 1; i++) {sum += S[i];}System.out.println(sum);scan.close();}
}


【出棧次序】

n 個元素有多少種出棧順序??

public class Main {// 不用管出站后車的數量和順序,因為進站順序和出站順序已經決定出站時的排序static int fun(int a, int b) {// a是等待進站的數目,b是站中的數目if (a == 0)// 此時已全部進站,出站時的順序只有一種return 1;if (b == 0)// 此時車站為空,只能讓車進站return fun(a - 1, 1);// 有兩種走法:1、讓一輛車進站 ;2、讓一輛車出站return fun(a - 1, b + 1) + fun(a, b - 1);}static int fun(int a) {return fun(a, 0);}public static void main(String[] args) {System.out.println(fun(16));}
}

出棧順序問題講解 藍橋杯_出棧序列-CSDN博客? ?請參考!

卡特蘭數Catalan numbers

經典使用場景

1.合法的括號序列

2.二叉樹形態計數

3.棧的出棧順序

4.不同弦的相交

5.Dyck路徑

6.凸多邊形的三角劃分

7.非交叉集合的劃分

5. 卡特蘭數(Catalan)公式、證明、代碼、典例.-CSDN博客? ?參考!

//函數功能: 計算Catalan的第n項
//函數參數: n為項數
//返回值:  第n個Catalan數
int Catalan(int n)
{if(n<=1) return 1;int *h = new int [n+1]; //保存臨時結果h[0] = h[1] = 1;        //h(0)和h(1)//第i項Cifor(int i=2;i<=n;++i)    //依次計算h(2),h(3)...h(n){h[i] = 0;for(int j = 0; j < i; j++) //根據遞歸式計算 h(i)= h(0)*h(i-1)+h(1)*h(i-2) + ... + h(i-1)h(0)h[i] += (h[j] * h[i-1-j]);}int result = h[n]; //保存結果delete [] h;       //注意釋放空間return result;
}

【居中輸出】

//暴力解法import java.util.Scanner;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {static int num(int m){int  n = 0;//在計算數字的位數的時候需要考慮0 否則測試用例只能通過90%if(m==0){return 1;}while(m>0){m/=10;n++;}return n;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int count = (10-num(n))/2;if(num(n)+count*2==10){for(int i=0;i<count;i++){System.out.printf("%c",'=');}System.out.printf("%d",n);for(int i=0;i<count;i++){System.out.printf("%c",'=');}}else{for(int i=0;i<count+1;i++){System.out.printf("%c",'=');}System.out.printf("%d",n);for(int i=0;i<count;i++){System.out.printf("%c",'=');}}        scan.close();}
}
【平方十位數】?

import java.math.BigInteger;
import java.util.Scanner;
public class Main {static boolean sqrt_num1(long m) {// 不遺漏String s = m + "";int len = s.length();if (len != 10) {return false;}// 不重復:各個數位上的數字不重復int[] num = new int[10];for (int i = 0; i < 10; i++) {num[i] = 0;}while (m > 0) {//注意格式 (int)m%10  是把long型的數字限制在int的范圍內 //而不是把(m%10)的結果由long轉換為 intint last = (int) (m % 10);    num[last]++;m /= 10;if (num[last] > 1) {return false;}}return true;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 9876543210最大的數
//	        long big = 9876543210L;
//	        long a = (long) Math.sqrt(big);
//	        System.out.println(a);  //a=99380;int flag = 0;for (long i = 99380; i > 0; i--) {long t = i * i;if (sqrt_num1(t)) {System.out.println(t);flag = 1;break;}if (flag == 1) {break;}}scan.close();}
}
【神奇六位數】

import java.util.Scanner;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {//輔助boolean數組a[]static int[] six_num(int m){int[] arr = new int[10];for(int i=0;i<10;i++){arr[i] = 0;}while(m>0){int last =m%10;arr[last]++;m/=10;}return arr;} static boolean eq(int[] a,int[] b){for(int i=0;i<10;i++){if(a[i]!=b[i]){return false;}}return true;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);//神奇六位數int start = 100000;int i=start;while(i<166666){int[] temp = six_num(i).clone();int j=2;int count = 0;while(j<7){int num = i*j;
//            String str = num+"";
//            //乘積的位數不是6位數
//            if(str.length()!=6){
//              j=8; //跳出循環
//            }int[] arr = six_num(num).clone();if(eq(temp,arr)){j++;count++;}else {j=8;}}//不符合條件if(j==8){i++;}//正常跳出循環j==7if(j==7){System.out.println(i);i=166667;break;}}scan.close();}
}
?【前綴判斷】

import java.util.Scanner;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {static String start_with(String a,String b){//是否 a 包含了 b if(a.startsWith(b)){return a;}else{return "";}}static void test(String a,String b){String p =start_with(a,b);if(p==""&&b!=""){System.out.printf("[NO]\n");}else{System.out.printf("|%s|\n",p);  }} public static void main(String[] args) {Scanner scan = new Scanner(System.in);test("abcd","abc");test("abcd","acb");test("abcd","abcd");test("abcd","abcd");test("","abc");test("","");scan.close();// System.out.println("".startsWith("abc"));}
}

startsWith(String s);? ? String對象的一個方法用來判斷是否是前綴,返回值是布爾類型

【最小公倍數和最大公因數】?

import java.util.Scanner;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {static void swap(int a,int b){int temp;temp = a;a = b;b = temp;} static void myfunc(int a,int b){int m,n,r;//輾轉相除法//讓第一個數字大if(a<b){swap(a,b);}//此時a>b m>n//m n 保留最初的兩個數m = a;n = b;r = a%b;while(r!=0) {a = b;b = r;r = a%b;}//出來的時候說明r==0  即a能整除bSystem.out.printf("%d\n",b);//最大公約數System.out.printf("%d\n",b*(m/b)*(n/b)); //最小公倍數}public static void main(String[] args) {Scanner scan = new Scanner(System.in);myfunc(30,12);myfunc(12*7,30);scan.close();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78019.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【集群IP管理分配技術_DHCP】二、DHCP核心功能與技術實現

一、智能 IP 地址分配功能與技術實現? 1.1 功能概述? 智能 IP 地址分配是 DHCP 中間件的核心功能之一&#xff0c;它打破了傳統 DHCP 固定的分配模式&#xff0c;能夠根據網絡的實時狀態、客戶端類型、接入位置等多種因素&#xff0c;動態且合理地分配 IP 地址。例如&#…

實現AWS Lambda函數安全地請求企業內部API返回數據

需要編寫一個Lambda函數在AWS云上運行,它需要訪問企業內部的API獲取JSON格式的數據,企業有網關和防火墻,API有公司的okta身份認證,通過公司的域賬號來授權訪問,現在需要創建一個專用的域賬號,讓Lambda函數訪問Secret Manager,來獲取賬號密碼,然后通過配置訪問公司內部A…

子網劃分的學習

定長子網劃分&#xff08;Fixed-length Subnetting&#xff09; 也叫做固定長度子網劃分&#xff0c;是指在一個IP網絡中&#xff0c;把網絡劃分成若干個大小相等的子網&#xff0c;每個子網的子網掩碼長度是一樣的。 一、定長子網劃分的背景 在早期的IP地址分配中&#xff0…

3.QT-信號和槽|自定義槽函數|自定義信號}自定義的語法}帶參數的信號和槽(C++)

信號和槽 Linux信號 Signal 系統內部的通知機制. 進程間通信的方式. 信號源&#xff1a;誰發的信號.信號的類型&#xff1a;哪種類別的信號信號的處理方式&#xff1a;注冊信號處理函數&#xff0c;在信號被觸發的時候自動調用執行. Qt中的信號和Linux中的信號&#xff0c;雖…

如何在 Element UI 中優雅地使用 `this.$loading` 顯示和隱藏加載動畫

如何在 Element UI 中優雅地使用 this.$loading 顯示和隱藏加載動畫 在現代 Web 應用開發中&#xff0c;用戶體驗至關重要。當執行耗時操作&#xff08;如網絡請求或數據處理&#xff09;時&#xff0c;顯示一個友好的加載動畫可以讓用戶知道系統正在工作&#xff0c;而不是卡…

動態加載內容時selenium如何操作?

當處理動態加載的內容時&#xff0c;Selenium 是一個非常強大的工具&#xff0c;因為它可以模擬真實用戶的瀏覽器行為&#xff0c;等待頁面元素加載完成后再進行操作。以下是使用 Selenium 獲取動態加載內容的詳細步驟和代碼示例。 一、安裝 Selenium 和 ChromeDriver &#…

力扣第446場周賽

有事沒趕上, 賽后模擬了一下, 分享一下我的解題思路和做題感受 1.執行指令后的得分 題目鏈接如下&#xff1a;力扣 給你兩個數組&#xff1a;instructions 和 values&#xff0c;數組的長度均為 n。 你需要根據以下規則模擬一個過程&#xff1a; 從下標 i 0 的第一個指令開…

三維點擬合平面ransac c++

理論 平面的一般定義 在三維空間中&#xff0c;一個平面可以由兩個要素唯一確定&#xff1a; 法向量 n(a,b,c)&#xff1a;垂直于平面的方向 平面上一點 平面上任意一點 p(x,y,z) 滿足&#xff1a; ( p ? p 0 ) ? n 0 (p - p0) * n 0 (p?p0)?n0 即 a ( x ? x 0 ) …

基于LSTM-AutoEncoder的心電信號時間序列數據異常檢測(PyTorch版)

心電信號&#xff08;ECG&#xff09;的異常檢測對心血管疾病早期預警至關重要&#xff0c;但傳統方法面臨時序依賴建模不足與噪聲敏感等問題。本文使用一種基于LSTM-AutoEncoder的深度時序異常檢測框架&#xff0c;通過編碼器-解碼器結構捕捉心電信號的長期時空依賴特征&#…

Docker 部署 PostgreSQL 數據庫

Docker 部署 PostgreSQL 數據庫 基于 Docker 部署 PostgreSQL 數據庫一、拉取 PostgreSQL 鏡像二、運行 PostgreSQL 容器三、運行命令參數詳解四、查看容器運行狀態 基于 Docker 部署 PostgreSQL 數據庫 一、拉取 PostgreSQL 鏡像 首先&#xff0c;確保你的 Docker 環境已正確…

MySQL性能調優(四):MySQL的執行原理(MYSQL的查詢成本)

文章目錄 MySQL性能調優數據庫設計優化查詢優化配置參數調整硬件優化 1.MySQL的執行原理-21.1.MySQL的查詢成本1.1.1.什么是成本1.1.2.單表查詢的成本1.1.2.1.基于成本的優化步驟實戰1. 根據搜索條件&#xff0c;找出所有可能使用的索引2. 計算全表掃描的代價3. 計算使用不同索…

用 Go 優雅地清理 HTML 并抵御 XSS——Bluemonday

1、背景與動機 只要你的服務接收并回顯用戶生成內容&#xff08;UGC&#xff09;——論壇帖子、評論、富文本郵件正文、Markdown 等——就必須考慮 XSS&#xff08;Cross?Site Scripting&#xff09;攻擊風險。瀏覽器在解析 HTML 時會執行腳本&#xff1b;如果不做清理&#…

Redis SCAN 命令的詳細介紹

Redis SCAN 命令的詳細介紹 以下是 Redis SCAN? 命令的詳細介紹&#xff0c;結合其核心特性、使用場景及底層原理進行綜合說明&#xff1a; 工作原理圖 &#xff1a; ? 一、核心特性 非阻塞式迭代 通過游標&#xff08;Cursor&#xff09; 分批次遍歷鍵&#xff0c;避免一次…

SpringBoot3集成MyBatis-Plus(解決Boot2升級Boot3)

總結&#xff1a;目前升級僅發現依賴有變更&#xff0c;其他目前未發現&#xff0c;如有發現&#xff0c;后續會繼續更新 由于項目架構提升&#xff0c;以前開發的很多公共的組件&#xff0c;以及配置都需要升級&#xff0c;因此記錄需要更改的配置&#xff08;記錄時間&#…

基于mybatis與PageHelper插件實現條件分頁查詢(3.19)

實現商品分頁例子 需要先引入mybatis與pagehelper插件&#xff0c;在pom.xml里 <!-- Mybatis --> <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3&l…

Spring Bean 全方位指南:從作用域、生命周期到自動配置詳解

目錄 1. Bean 的作用域 1.1 singleton 1.2 prototype 1.3 request 1.4 session 1.5 application 1.5.1 servletContext 和 applicationContext 區別 2. Bean 的生命周期 2.1 詳解初始化 2.1.1 Aware 接口回調 2.1.2 執行初始化方法 2.2 代碼示例 2.3 源碼 [面試題…

C++ (非類型參數)

模板除了定義類型參數之外&#xff0c;也可以在模板內定義非類型參數 非類型參數不是類型&#xff0c;而是值&#xff0c;比如&#xff1a;指針&#xff0c;整數&#xff0c;引用 非類型參數的用法&#xff1a; 1.整數常量&#xff1a;非類型參數最常見的形式是整數常量&…

短視頻+直播商城系統源碼全解析:音視頻流、商品組件邏輯剖析

時下&#xff0c;無論是依托私域流量運營的品牌方&#xff0c;還是追求用戶粘性與轉化率的內容創作者&#xff0c;搭建一套完整的短視頻直播商城系統源碼&#xff0c;已成為提升用戶體驗、增加商業變現能力的關鍵。本文將圍繞三大核心模塊——音視頻流技術架構、商品組件設計、…

5.QT-常用控件-QWidget|enabled|geometry|window frame(C++)

控件概述 實現圖形化界面的程序. Qt中已經給我們提供了很多的“控件" 就需要學習和了解這些控件&#xff0c;學會如何使用這些控件 編程講究的是“站在巨人的肩膀上”&#xff0c;而不是“從頭發明輪子" 一個圖形化界面上的內容&#xff0c;不需要咱們全都從零去實…

2025-04-22| Docker: --privileged參數詳解

在 Docker 中&#xff0c;--privileged 是一個運行容器時的標志&#xff0c;它賦予容器特權模式&#xff0c;大幅提升容器對宿主機資源的訪問權限。以下是 --privileged 的作用和相關細節&#xff1a; 作用 完全訪問宿主機的設備&#xff1a; 容器可以訪問宿主機的所有設備&am…