字符串倒序
薯队长带着小红薯参加密室逃脱团建游戏,首先遇到了反转游戏,小红薯们根据游戏提示收集了多个单词线索,并将单词按要求加一个空格组 成了句子,最终要求把句子按单词反转解密。 说明:收集的时候单词前后可能会有多个空格,反转后单词不能有多个空格,具体见输入输出样例。
输入描述:
输入一个字符串。包含空格和可见字符。长度<=100000。
输出描述:
输出一个字符串,表示反转后结果。
示例1
输入
the sky is blue!
输出
blue! is sky the
:经常出现,比较简单
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String a = scanner.nextLine();
int flag = 0;
String b="";
String str[]=a.trim().split(" +");
for(int i=str.length-1;i>0;i--){
b=b+str[i]+" ";
}
b=b+str[0] ;
System.out.println(b);
}
}
笔记精选
薯队长写了n篇笔记,编号从1~n,每篇笔记都获得了不少点赞数。
薯队长想从中选出一些笔记,作一个精选集合。挑选的时候有两个规则:
1.不能出现连续编号的笔记。
2.总点赞总数最多
如果满足1,2条件有多种方案,挑选笔记总数最少的那种
输入描述:
输入包含两行。第一行整数n表示多少篇笔记。 第二行n个整数分别表示n篇笔记的获得的点赞数。
(0<n<=1000, 0<=点赞数<=1000)
输出描述:
输出两个整数x,y。空格分割。
x表示总点赞数,y表示挑选的笔记总数。
示例1
输入
4
1 2 3 1
输出
4 2
:动态规划找公式,由于不能出现连续, 容易想到想到dp[i] (此处dp值为点赞数)是肯定与dp[i-2]和dp[i-3]之间有关系,如果与dp[i-4]有直接关系意味着跳过了dp[i-2]会导致点赞数变少,情况错误
dp[i] = max(dp[i-2],dp[i-3])+ mm[i](当前点赞数)
然而还要考虑比笔记数则 dp[x][0] 为 点赞数 dp[x][1]为笔记数
- 当 dp[i-2][0] 与 dp[i-3][0] 不等时:
dp[i][0] = max(dp[i-2][0],dp[i-3][0])+ mm[i](当前点赞数)
dp[i][1]= dp【x】[1] 对应的天数 + 1 - 当 dp[i-2][0] 与 dp[i-3][0] 相等时:
dp[i][0] = dp【x】[0] +mm[i] x对应的天数小的
dp[i][1]= min (dp[i-2][1] , dp[i-3][1]) + 1 - 对0的考虑
这种情况我一开始忽略了导致最后一组数据 n= 999 过不了
发现他含有0 ,0点赞数每增加但是笔记数+1了这是我们不想要的。跟上面情况一样只是天数不加1。把0对应位置的 index(0)-2 ,index(0)- 3的数据比较后传到0位置来。
输出和初始化大家想一下就明白了。
题目还算好想,考虑不全的话看到错误也能改出来。代码写的很多,但是思想简单,建议大家自己写哈。
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
scanner.nextLine();
String b = scanner.nextLine();
String []arr=b.split(" +");
int []mm = new int[a];
for(int i=0;i<a;i++)
mm[i]= Integer.parseInt(arr[i]);
int [][]dp = new int[a][2];
for(int i=0;i<a;i++){
// 等于0等情况 把dp[i-1] dp[i-2]按条件过度过来但是步数不加
// 不然有一组999 的案例里面含有0过不了
if(mm[i]==0){
// System.out.println(i+"含有0");
if(dp[i-2][0]<dp[i-3][0]){
dp[i][0]=dp[i-3][0]+mm[i];
dp[i][1]=dp[i-3][1] ;
}else if(dp[i-2][0]>dp[i-3][0]){
dp[i][0]=dp[i-2][0]+mm[i];
dp[i][1]=dp[i-2][1] ;
}else{
if(dp[i-2][1]<dp[i-3][1]){
dp[i][0]=dp[i-2][0]+mm[i];
dp[i][1]=dp[i-2][1] ;
}else{
dp[i][0]=dp[i-3][0]+mm[i];
dp[i][1]=dp[i-3][1] ;
}
}
continue;
}
if(i<2){
dp[i][0]=mm[i];
dp[i][1]=1;
}else if(i==2){
dp[i][0]=dp[0][0]+mm[i];
dp[i][1]=2;
}
else{
if(dp[i-2][0]<dp[i-3][0]){
dp[i][0]=dp[i-3][0]+mm[i];
dp[i][1]=dp[i-3][1]+1;
}else if(dp[i-2][0]>dp[i-3][0]){
dp[i][0]=dp[i-2][0]+mm[i];
dp[i][1]=dp[i-2][1]+1;
}else{
if(dp[i-2][1]<dp[i-3][1]){
dp[i][0]=dp[i-2][0]+mm[i];
dp[i][1]=dp[i-2][1]+1;
}else{
dp[i][0]=dp[i-3][0]+mm[i];
dp[i][1]=dp[i-3][1]+1;
}
}
}
}
if(dp[a-1][0]>dp[a-2][0])
System.out.println(dp[a-1][0]+" "+dp[a-1][1]);
else if(dp[a-1][0]<dp[a-2][0])
System.out.println(dp[a-2][0]+" "+dp[a-2][1]);
else {
if( dp[a-1][1]>=dp[a-2][1])
System.out.println(dp[a-2][0]+" "+dp[a-2][1]);
else
System.out.println(dp[a-1][0]+" "+dp[a-1][1]);
}
}
}
击败魔物
没什么思路 (太菜了