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