java程序练习-B-流放之路

  流放之路 

描述
Description

Dastan输了赌局,在流放之路上,唯一能够带走的只有机器人R2D2.
Dastan还保存了许多绝地剑术视频,但R2D2的硬盘不够大。所以他不得不把它们转刻到光盘上保存。于是他想尽可能地利用好光盘的每一bit空间,尽可能把光盘刻得满满的。
现在Dastan手头上拿到了一张空白容量为S MB的光盘,他文件夹里有N个电影,每个电影的大小分别为X1、X2、……、XN,单位为MB。
请你帮他编写一个程序,计算到底光盘最大能刻得多满,单位为MB。
输入
Input


第一个数字为T,表示测试数据的组数,T≤10,
接下来的T行的每行第一个数字为1≤S≤10000,表示光盘的空白容量,第二个数字1≤N≤10000,表示电影的个数,随后的N个整数X1、X2、……、XN表示每个电影的大小(1≤X≤10000)。
输出
Output

共T行,每一行包含一个整数,表示该光盘能刻录的最大容量。
样例输入
Sample Input

3
4000 3 100 200 300
450 3 100 200 300
100 3 200 300 400
样例输出
Sample Output

600
400
0
参考代码

import java.util.*;
public class Main {
	final public static int CN = 10001;
	public static int v[];
	public static boolean used[];
	public static int N;
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int cases = cin.nextInt();
		while(cases > 0){
			int S = cin.nextInt();
			N = cin.nextInt();
			used = new boolean[S + 1];
			v = new int[N];
			for(int i = 0;i < N;++ i){
				v[i] = cin.nextInt();
			}
			used[0] = true;
			for(int i = 0;i < N;++ i){
				for(int j = S;j >= v[i];-- j){
					if(!used[j] && used[j - v[i]]){
						used[j] = true;
					}
				}
			}
			for(int j = S;j >= 0;-- j){
				if(used[j]){
					System.out.println(j);
					break;
				}
			}
			cases --;
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
定义B-树存储结构(要求m3;为方便操作,结点增加双亲结点指针域,最底层的Fail结点用NULL指针表示并且所有结点均存储于内存)。定义B-树插入关键字函数、删除关键字函数、查找关键字函数以及按层次遍历输出B-树所有结点的函数。主函数定义菜单(1.插入关键字 2.删除关键字 3. 查找关键字 4.层次遍历输出B-树所有结点 5.结束程序)。 1. 插入关键字功能的输入为一个关键字,输出为新插入关键字所在结点的信息。 要求结点信息输出格式如下所示: (R102, n, K1, K2, …, Kn) R102表示结点位置,R表示根结点指针;第一个数字1表示根结点的A[1]指针,第二个数字0表求R->A[1]所指结点的A[0]指针,第三个数字2表示R->A[1]->A[0]所指结点的A[2]指针,即该结点指针为: R->A[1]->A[0]->A[2](该结点在第4层上)。n为该结点的关键字数目,K1, K2, …, Kn为该结点n个非递减有序的关键字。 2. 删除关键字功能的输入为一个关键字,输出为删除成功与失败的信息。 3. 查找关键字功能的输入为一个关键字,输出为查找成功与失败的信息,查找成功时,应输出关键字所在结点信息(结点信息输出方法同1.)。 4. 按层次遍历输出B-树所有结点功能的输入为一个字符文件名,输出为该字符文件,字符文件,一个结点的信息输出一行(结点信息输出方法同1.),结点输出次序为按层次号由小到大并且同层结点从左向右。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值