给定一个长度为的正整数数列,其中第个数为。 你可以进行任意次下述“模仿”操作:选择一个位置,令等于。 现在你希望最大化这个数列的数字和,同时你需要用尽可能少的操作次数来达成这个目标,那么这个数列的数字和最大是多少?达成这个目标最少的操作次数又是多少?
区块链毕设网qklbishe.com为您提供问题的解答 给定一个长度为的正整数数列,其中第个数为。
你可以进行任意次下述“模仿”操作:选择一个位置,令等于。
现在你希望最大化这个数列的数字和,同时你需要用尽可能少的操作次数来达成这个目标,那么这个数列的数字和最大是多少?达成这个目标最少的操作次数又是多少?
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(reader.readLine()); long[] nums = Arrays.stream(reader.readLine().split(" ")).mapToLong(Long::parseLong).toArray(); int cnt = 0; for (int i = N - 2; i >= 0; i--) { if (nums[i] < nums[i + 1]) { nums[i] = nums[i + 1]; cnt++; } } long s = 0; for (int i = 0; i < N; i++) { s += nums[i]; } System.out.println(s + " " + cnt); } }
编辑于 2022-09-24 11:51:05
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e6+5;
int g[N];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>g[i];
}
//改为long long才能过,我爆int了
long long sum=0;
int num=0;
int cnt=0;
//从后找大值,num存最值,比num小则修改并且累加修改值,大于等于num则修改num值。
for(int i=n-1;i>=0;i–){
if(num<=g[i]){
num=g[i];
}
else
cnt++;
sum+=num;
}
cout<<sum<<" "<<cnt<<endl;
return 0;
}
39:32
这题咋做啊?
05:43