首页 > 其他分享 >#yyds干货盘点# 动态规划专题:前缀和

#yyds干货盘点# 动态规划专题:前缀和

时间:2022-11-12 20:32:05浏览次数:40  
标签:yyds arr 前缀 int long nextInt 干货 new dp

1.简述:

描述

给定一个长度为n的数组#yyds干货盘点# 动态规划专题:前缀和_代码实现.

接下来有q次查询, 每次查询有两个参数l, r.

对于每个询问, 请输出#yyds干货盘点# 动态规划专题:前缀和_数组_02

输入描述:

第一行包含两个整数n和q.

第二行包含n个整数, 表示#yyds干货盘点# 动态规划专题:前缀和_代码实现.

接下来q行,每行包含两个整数   l和r.

#yyds干货盘点# 动态规划专题:前缀和_数组_04#yyds干货盘点# 动态规划专题:前缀和_i++_05#yyds干货盘点# 动态规划专题:前缀和_i++_06

输出描述:

输出q行,每行代表一次查询的结果.

示例1

输入:

3 2
1 2 4
1 2
2 3

输出:

3
6

2.代码实现:


// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n = in.nextInt();
int q = in.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
long[] dp = genDp(arr);
for (int i = 0; i < q; i++) {
int l = in.nextInt();
int r = in.nextInt();
long sum = l < 2 ? dp[r - 1] : dp[r - 1] - dp[l - 2];
System.out.println(sum);
}

}
}

public static long[] genDp(int[] arr) {
if (arr == null || arr.length < 1) {
return new long[0];
}
int n = arr.length;
long[] dp = new long[n];
// dp[0]
dp[0] = arr[0];
for (int i = 1; i < n; i++) {
dp[i] = dp[i - 1] + arr[i];
}
return dp;
}
}

标签:yyds,arr,前缀,int,long,nextInt,干货,new,dp
From: https://blog.51cto.com/u_15488507/5846794

相关文章