蓝桥杯算法提高题与官方答案(3)

2019-03-09 13:45

2 4 3 1 3 3 0 0

样例输出 Case 1: 0.22 Case 2: 0.00

数据规模与约定

1<=U,V<=N<=50,N-1<=M<=1000,0<=W<=50。数据不超过5组。 参考代码:

该题暂时没有人完全正确,暂时没有该语言的参考程序。

编号: ADV-6

题目:邮票面值设计 关键字:搜索 类型:VIP试题 问题描述:

给定一个信封,最多只允许粘贴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.io.BufferedReader; import java.io.IOException; import java.io.InputStream;

import java.io.InputStreamReader; import java.util.StringTokenizer;

class Scanner { BufferedReader br; StringTokenizer st;

InputStream in = System.in;

public Scanner() { br = new BufferedReader(new InputStreamReader(in)); eat(\}

private void eat(String s) { st = new StringTokenizer(s); }

public String nextLine() { try { return br.readLine(); } catch (IOException e) { return null; } }

public boolean hasNext() { while (!st.hasMoreTokens()) { String s = nextLine(); if (s == null) return false; eat(s); } return true; }

public String next() { hasNext(); return st.nextToken(); }

public int nextInt() { return Integer.parseInt(next()); }

public float nextFloat() { return Float.parseFloat(next()); }

public Double nextDouble() { return Double.parseDouble(next());

} public Long nextLong(){ return Long.parseLong(next()); } }

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(); N = in.nextInt(); K = in.nextInt();

count[1] = 1; //1是固定的 Dp(1);

for (int i = 1; i <= K; i++) {

System.out.print(sum[i] + \ }

System.out.println();

System.out.print(\ }

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; } }

编号: ADV-7 题目:子集选取 关键字:组合 类型:VIP试题 问题描述:

一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007。 输入格式

输入一行两个整数N,K。 输出格式

输出一个整数表示答案。 样例输入 3 2

样例输出 6

数据规模和约定

1 <= K <= N <= 10 ^ 6。 参考代码:

该题暂时没有人完全正确,暂时没有该语言的参考程序。

编号: ADV-8

题目:冒泡排序计数 关键字:组合 类型:VIP试题 问题描述:

考虑冒泡排序的一种实现。 bubble-sort (A[], n) > round = 0

> while A is not sorted

>> round := round + 1 >> for i := 1 to n - 1 >>> if (A[i] > A[i + 1]) >>>> swap(A[i], A[i + 1])

求1 .. n的排列中,有多少个排列使得A被扫描了K遍,亦即算法结束时round == K。

答案模20100713输出。 输入格式

输入包含多组数据。每组数据为一行两个整数N,K。 输出格式

对每组数据,输出一行一个整数表示答案。 样例输入 3 3 0 3 1 3 2 样例输出 1 3 2

数据规模和约定 T <= 10 ^ 5。

1 <= K < N < 10 ^ 6。 参考代码:

该题暂时没有人完全正确,暂时没有该语言的参考程序。

编号: ADV-9

题目:递归倒置字符数组 关键字:

类型:VIP试题 问题描述:

完成一个递归程序,倒置字符数组。并打印实现过程 递归逻辑为:

当字符长度等于1时,直接返回

否则,调换首尾两个字符,在递归地倒置字符数组的剩下部分 输入格式

字符数组长度及该数组 输出格式

在求解过程中,打印字符数组的变化情况。

最后空一行,在程序结尾处打印倒置后该数组的各个元素。 样例输入 Sample 1 5 abcde Sample 2


蓝桥杯算法提高题与官方答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:英语名篇背诵手册+中英对照

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: