蓝桥杯java 算法提高 摆花
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯java 算法提高 摆花
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描述 小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共m盆。通過調查顧客的喜好,小明列出了顧客最喜歡的n種花,從1到n標號。為了在門口展出更多種花,規定第i種花不能超過ai盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。
試編程計算,一共有多少種不同的擺花方案。 輸入格式 第一行包含兩個正整數n和m,中間用一個空格隔開。
第二行有n個整數,每兩個整數之間用一個空格隔開,依次表示a1、a2、……an。 輸出格式 輸出只有一行,一個整數,表示有多少種方案。注意:因為方案數可能很多,請輸出方案數對1000007取模的結果。 樣例輸入 2 4
3 2 樣例輸出 2 輸入輸出樣例說明 有2種擺花的方案,分別是(1,1,1,2), (1,1,2,2)。括號里的1和2表示兩種花,比如第一個方案是前三個位置擺第一種花,第四個位置擺第二種花。 數據規模和約定 對于20%數據,有 0<n≤8,0<m≤8,0≤ai≤8;
對于50%數據,有0<n≤20,0<m≤20,0≤ai≤20;
對于100%數據,有0<n≤100,0<m≤100,0≤ ai≤100。 1 import java.util.Scanner; 2 3 public class Main { 4 5 /** 6 * @param 擺花 7 * @return 8 */ 9 static int a[]; 10 static int f[]; 11 static int sum = 0; 12 public static void main(String[] args) { 13 Scanner sc = new Scanner(System.in); 14 int n = sc.nextInt(); 15 int m = sc.nextInt(); 16 17 a = new int[102]; 18 f = new int[102]; 19 for(int i = 1; i <= n; ++i){ 20 a[i] = sc.nextInt(); 21 } 22 f[0] = 1; 23 for (int i = 1, j, k; i <= n; sum = 0, ++i) 24 { 25 for (j = m, sum = 0; j > a[i]; f[j] = sum, sum = 0, --j) 26 for (k = j - a[i]; k <= j; sum %= 1000007, ++k) 27 sum += f[k]; 28 for (j = a[i], sum = 0; j > -1; f[j] = sum, sum = 0, --j) 29 for (k = 0; k <= j; sum %= 1000007, ++k) 30 sum += f[k]; 31 } 32 // System.out.print(sum+'\n'); 33 System.out.println(f[m]); 34 } 35 }
試編程計算,一共有多少種不同的擺花方案。 輸入格式 第一行包含兩個正整數n和m,中間用一個空格隔開。
第二行有n個整數,每兩個整數之間用一個空格隔開,依次表示a1、a2、……an。 輸出格式 輸出只有一行,一個整數,表示有多少種方案。注意:因為方案數可能很多,請輸出方案數對1000007取模的結果。 樣例輸入 2 4
3 2 樣例輸出 2 輸入輸出樣例說明 有2種擺花的方案,分別是(1,1,1,2), (1,1,2,2)。括號里的1和2表示兩種花,比如第一個方案是前三個位置擺第一種花,第四個位置擺第二種花。 數據規模和約定 對于20%數據,有 0<n≤8,0<m≤8,0≤ai≤8;
對于50%數據,有0<n≤20,0<m≤20,0≤ai≤20;
對于100%數據,有0<n≤100,0<m≤100,0≤ ai≤100。 1 import java.util.Scanner; 2 3 public class Main { 4 5 /** 6 * @param 擺花 7 * @return 8 */ 9 static int a[]; 10 static int f[]; 11 static int sum = 0; 12 public static void main(String[] args) { 13 Scanner sc = new Scanner(System.in); 14 int n = sc.nextInt(); 15 int m = sc.nextInt(); 16 17 a = new int[102]; 18 f = new int[102]; 19 for(int i = 1; i <= n; ++i){ 20 a[i] = sc.nextInt(); 21 } 22 f[0] = 1; 23 for (int i = 1, j, k; i <= n; sum = 0, ++i) 24 { 25 for (j = m, sum = 0; j > a[i]; f[j] = sum, sum = 0, --j) 26 for (k = j - a[i]; k <= j; sum %= 1000007, ++k) 27 sum += f[k]; 28 for (j = a[i], sum = 0; j > -1; f[j] = sum, sum = 0, --j) 29 for (k = 0; k <= j; sum %= 1000007, ++k) 30 sum += f[k]; 31 } 32 // System.out.print(sum+'\n'); 33 System.out.println(f[m]); 34 } 35 }
?
轉載于:https://www.cnblogs.com/duanyingkui/p/8343258.html
總結
以上是生活随笔為你收集整理的蓝桥杯java 算法提高 摆花的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BASIC-23_蓝桥杯_芯片测试
- 下一篇: 如何实现网站文件动静分离