一、爱玩游戏的小J
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
有许多程序员都热爱玩游戏游戏,而小J自称为游戏王,曾玩过几百种游戏,几乎所有能玩到的游戏大作都玩遍了。随着时间的推移,他发觉已经没有游戏可以让他玩了!于是他想改玩一些古老的游戏,以成为真正的“游戏王”。他希望在接下来的一段时间内将过去出的游戏全部玩一遍,但是毕竟时间有限,因此他感到很苦恼。于是他给每个游戏标上一个成就值,同时估算了完成这些游戏所需要的时间。
现在他只有X天时间。而每个游戏一旦开始玩,至少需要玩一天才能够停下来。那么,他所玩完的游戏的成就值之和最大能达到多少呢?(每个游戏必须玩完才能取得成值。)
输入
第一行输入case数T(0<T<20)。对于每个case,第一行输入游戏的数目N(0<N<11),总时间X(0<X<1000)用空格分隔。从第二行到第N+1行每行输入游戏的成就值Ai(0<Ai<10000),所需要花费时间Bi(0<Bi<10000)。
输出
对每个case输出一行,成就值之和的最大值。
样例输入
2
2 2
10 1
20 2
3 4
10 2
18 3
10 2
样例输出
20
20
作者:笨蛋蜘蛛
链接:https://www.nowcoder.com/discuss/218147?type=post&order=time&pos=&page=1
来源:牛客网
import java.util.Scanner;
public class dji {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int j = 0; j < T; j++) {
int N = sc.nextInt();
int X = sc.nextInt();
int[] Ai = new int[N];
int[] Bi = new int[N];
for (int i = 0; i < N; i++) {
Ai[i] = sc.nextInt();
Bi[i] = sc.nextInt();
}
dfs(N, X, Bi, Ai);
}
sc.close();
}
public static void dfs(int N, int X, int[] Ai, int[] Bi) {
int []count = new int[X + 1];
for (int m : count) {
m = 0;
}
for (int i = 0; i < N; i++) {
int w = Ai[i];
int v = Bi[i];
for (int j = X; j >= w; j--) {
count[j] = Math.max(count[j], count[j - w] + v);
}
}
System.out.println(count[X]);
}
}
二、不听话的机器人
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
小B平时喜欢倒腾一些小东西,最近他准备给自己做的小机器人加入一套语音控制的功能,每个指令对应一个动作。
由于语言转文字有很多现成的方案,所以小B打算直接复用这些方案,但是语音转成了文字之后,还需要将文字跟具体的动作对应起来。
因此小B需要实现一个函数,将语音转换出来的文字,再转换成相应的动作。
为了简单实现,小B将语音直接转成了拼音,然后把对应的动作也都起了名字,因此只要预先输入好两者的映射关系,然后输入语音指令就输出相应的动作。
然而因为小B的函数有bug,机器人并不想听他的话…
你能帮小B解决这个问题吗?
输入
输入包含多组测试数据,对于每组测试数据:
第一行输入两个正整数,空格隔开,需要进 行映射的命令的数目N 和进行调试时发送的语音指令条数 M (1 < N < 1000, 1 < M < 1000)
接下来N行,每行输入两个字符串表示语音指令和对应的动作cmd和action,以空格隔开,每个字符串的长度小于1000,且只有大小写字母
最后M行,每行输入一个字符串表示需要进行调试的语音指令
输出
对于每组测试数据:
输出M行,根据调试的语音指令输出对应的动作指令action
样例输入
4 4
ZuoZhuan TurnLeft
YouZhuan TurnRight
QianJin Forward
HouTui Backward
ZuoZhuan
QianJin
QianJin
HouTui
1 1
SDFlkjdf LNCIls
SDFlkjdf
样例输出
TurnLeft
Forward
Forward
Backward
LNCIls
个人写的没用任何技巧的代码
import java.util.Scanner;
public class main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int N = sc.nextInt();
int M = sc.nextInt();
String[] cmd = new String[N];
String[] action = new String[N];
String[] ans = new String[M];
for(int i=0;i<N;i++) {
cmd[i] = sc.next();
action[i] = sc.next();
}
for(int j=0;j<M;j++) {
ans[j] = sc.next();
for(int k=0;k<N;k++) {
if(ans[j].equals(cmd[k])) {
System.out.println(action[k]);
}
}
}
}
}
}
牛客网上使用哈希表的解法
作者:笨蛋蜘蛛
链接:https://www.nowcoder.com/discuss/218147?type=post&order=time&pos=&page=1
来源:牛客网
import java.util.HashMap;
import java.util.Scanner;
public class dji1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int m = sc.nextInt();
HashMapmap=new HashMap();
for(int i=0;i<n;i++){
String string1=sc.next();
String string2=sc.next();
map.put(string1, string2);
}
for(int j=0;j<m;j++){
String string3=sc.next();
if(map.get(string3)!=null)
System.out.println(map.get(string3));
}
}
sc.close();
}
}