小红书 点赞的帖子 点赞总数最大
给一个数组 表示点赞的帖子, 要求求不相连的 点赞次数最大,输出 点赞总数 和 贴子数 import java.util.*;
public class Main {
private static int sum;
private static int y = 0;
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr = new int[n];
//ans[i][0]存放到i时最大的点赞数;ans[i][0]存放帖子数
int[][] ans = new int[n][2];
ans[0][1] = 1;
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
for (int i = 0; i < n; i++) {
function(arr, i, ans);
}
System.out.print(ans[n - 1][0] + " ");
System.out.print(ans[n - 1][1]);
}
public static int function(int[] a, int index, int[][] ans) {
if (index < 0)
return 0;
//数组能取出最大点赞数则取
if(ans[index][0] != 0)
return ans[index][0];
//index为1时单独讨论
if (index - 1 < 0) {
ans[index][0] = a[index];
return a[index];
}
//取n1和n2中最大的,即为所求的最大点赞数
int n1 = function(a, index - 2, ans) + a[index];
int n2 = function(a, index - 3, ans) + a[index - 1];
ans[index][0] = Math.max(n1, n2);
if (index >= 2)
if (n1 >= n2)
//最大点赞数包含index即将index - 2所能取的最大帖数加一
ans[index][1] = ans[index - 2][1] + 1;
else
//最大点赞数不包含index即index - 1所能取的最大帖数
if (index == 2)
//index为2单独讨论因为有数组溢出
ans[index][1] = 1;
else
ans[index][1] = ans[index - 1][1];
else
ans[index][1] = 1;
return ans[index][0];
}
}
#小红书##笔试题目#