藍橋杯java 演算法提高 郵票面值設計

來源:互聯網
上載者:User

標籤:如何   for   描述   一個   粘貼   tin   提高   mat   str   

問題描述  給定一個信封,最多隻允許粘貼N張郵票,計算在給定K(N+K≤13)種郵票的情況下(假定所有的郵票數量都足夠),如何設計郵票的面值,能得到最大值MAX,使在1~MAX之間的每一個郵資值都能得到。

  例如,N=3,K=2,如果面值分別為1分、4分,則在1分~6分之間的每一個郵資值都能得到(當然還有8分、9分和12分);如果面值分別為1分、3分,則在1分~7分之間的每一個郵資值都能得到。可以驗證當N=3,K=2時,7分就是可以得到的連續的郵資最大值,所以MAX=7,面值分別為1分、3分。輸入格式  一行,兩個數N、K輸出格式  兩行,第一行升序輸出設計的郵票面值,第二行輸出“MAX=xx”(不含引號),其中xx為所求的能得到的連續郵資最大值。範例輸入3 2範例輸出1 3
MAX=7 
import java.util.Scanner;public class Main {static int N, K;static int count[] = new int[11];static int sum[] = new int[11];static int Value[] = new int[1000];public static void main(String[] args) {Scanner in = new Scanner(System.in);N = in.nextInt();K = in.nextInt();in.close();count[1] = 1; Dp(1);for (int i = 1; i <= K; i++) {System.out.print(sum[i] + " ");}System.out.println();System.out.print("MAX=" + (sum[0] - 1));}private static void Dp(int dp) {int x = getbig(dp);if (dp == K) {return;}for (int i = x; i > count[dp]; i--) {count[dp + 1] = i;Dp(dp + 1);}}private static int getbig(int dp) {for (int i = 1; i <= 1000; i++) {Value[i] = 1000;for (int j = 1; j <= dp; j++)if (i >= count[j]) {Value[i] = Math.min(Value[i], Value[i - count[j]] + 1);}if (Value[i] > N) {if (i > sum[0]) {sum[0] = i;for (int j = 1; j <= dp; ++j)sum[j] = count[j];}return i;}}return 0;}}

  

藍橋杯java 演算法提高 郵票面值設計

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.