今天的全国大学生算法程序设计大赛,我最可惜的一题!!!!
Description
您是一个神仙,但您很喜欢采药。
您有一个神奇的背包,背包内有VV个格子。
您所在的空间内有一些药,每个药会占用 11 或 22 个格子。
每天可以进行一次如下操作:
采摘一个药材放入背包中,若此时背包中没有多余的格子来放入新的药材,可以先将背包中的若干药材扔出去,至于扔多少以及扔几个,全都由您决定。当然您也可以选择不去进行采摘操作。
每一天结束前,神奇背包中的每个药材都会产生一个药丸。
作为神仙,您知道每天您可以采摘的药材类型(即占用格子数目),注意,当天的药材如果不采摘,在第二天就会消失(当天药材仅限当天采摘)。
为了获得尽可能多的药丸,请您计算最终能获得的药丸数目最多是多少?
Input
给定一个整数 VV 表示背包的格子数量,接下来一行一个由1或2构成的字符串 ss 表示药占用体积的情况。
其中1表示该药占用体积为 11,2表示该药占用体积为 22。
|s|∣s∣表示天数
V\leq100000,|s|\leq 100000V≤100000,∣s∣≤100000
Output
最多的药丸数目。
这道题我写出来了,但是!!! 我不会多行输入
代码如下:
public class Test {
public static void main(String[] args) {
int num =1 ;
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String s = scanner.nextLine();
int dayNum = 0;
int totalNum = 0;
int[] a = new int[s.length()];
int number = 0;//背包现有药材占的份额
for(int i = 1 ;i < s.length();i++) {
int value = s.charAt(i) -48;
int c = number + value;
if (c <= n) {
number += value;
a[i] = value;
dayNum++;
totalNum += dayNum;
}
if (c > n && value == 1) {
boolean flag = true;
for (int j = 0; j < a.length; j++) {
if (a[j] == 2) {
a[j] = 1;
number = number-1;
flag = false;
totalNum += dayNum;
break;
}
}
if(flag)
totalNum += dayNum;
}
if(value == 2 &&c > n){
totalNum += dayNum;
}
}
System.out.println(totalNum);
}
}
真的太坑了,气死我了,我的输入方式 是横向输入,没有多行输入 我测试的数据一直不对,一直说我答案错误,真的太可惜了这一题,由于今天比了赛,我就不做Leetcode了,我得去学别的东西了,对于这道题有别的见解的欢迎讨论,!!! 啊啊啊啊啊啊啊啊啊啊啊,真的气死人啊