给出一个由N个整数a组成的序列,用a[1],a[2]….a[N]表示。序列中的每个整数都有一个与其相关联的值W[1],W[2]……。W[N]。你必须选择给定数组a的一个子序列,使a中的所有元素都是严格递增的,并且在这个选定的子序列中元素的值之和是最大的。你必须打印这个最大值。
样本输入
2
4
1 2 3 4
100 200 300 400
3
4 2 3
100 30 20
1000
100
public class testing {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
int t = scn.nextInt();
StringBuilder sb = new StringBuilder();
while (t-- > 0) {
int n = scn.nextInt();
int a[] = new int[n];
long val[] = new long[n];
for (int i = 0; i < n; i++) {
a[i] = scn.nextInt();
}
for (int i = 0; i < n; i++) {
val[i] = scn.nextLong();
}
long dp[] = new long[n];
Arrays.fill(dp, Integer.MIN_VALUE);
dp[0] = val[0];
for (int i = 1; i < n; i++) {
for (int j = i - 1; j >= 0; j--) {
if (a[j] < a[i]) {
dp[i] = Math.max(dp[i], dp[j] + val[i]);
}
}
}
long ans = Integer.MIN_VALUE;
for (long v : dp) {
ans = Math.max(v, ans);
}
sb.append(ans + "\n");
}
System.out.println(sb);
}
}
我因为对比关系而变得很虚弱
约束1<=T<=51<=N<=2000001<=a[i]<=10^9,其中i∈[1...N]1<=w[i]<=10^9,其中i∈[1...N]
迭代一次,并为小于或等于给定a的a值维护W值之和的treemap
,就像在迭代a值时看到的那样。
对于新的a
,调用LowerEntry(key)
方法以获得该新a下面W的和。
记住最大的总和,然后返回。
static int sumIncreasing(int[] a, int[] w) {
int maxSum = Integer.MIN_VALUE;
TreeMap<Integer, Integer> sums = new TreeMap<>();
for (int i = 0; i < a.length; i++) {
Entry<Integer, Integer> lowerSum = sums.lowerEntry(a[i]);
int sum = (lowerSum != null ? lowerSum.getValue() + w[i] : w[i]);
sums.put(a[i], sum);
for (Entry<Integer, Integer> e; (e = sums.higherEntry(a[i])) != null && e.getValue() <= sum; )
sums.remove(e.getKey());
if (sum > maxSum)
maxSum = sum;
}
return maxSum;
}
System.out.println(sumIncreasing(new int[] {1, 2, 3, 4}, new int[] {100, 200, 300, 400}));
System.out.println(sumIncreasing(new int[] {4, 2, 3}, new int[] {100, 30, 20}));
输出
1000
100
问题内容: 有没有办法使用泛型说“此方法返回”? 当然,我想在子类中重写此方法,因此声明应与一起使用。 这是一个例子: 根本不起作用:我收到“类型不匹配:无法从Base转换为T”。如果我强制使用强制转换,则覆盖将失败。 问题答案: 不,无法表达这一点。只需声明该方法即可返回类的类型。Java具有协变返回类型,因此无论如何您都可以重写方法以返回更特定的类型。 如果您想为此添加一些标记,则可以随时引入
由于没有快速的lambda计算器,我使用上面的策略将非类型化lambda演算的术语编译为Haskell,以便快速计算它们。我对它的性能印象深刻:该程序创建了一个从到的数字列表,并在我的计算机上在不到一秒钟的时间内将它们相加。这比我预期的要快得多--只比Haskell直接等价物慢4倍--并且足以对我的目标有用。但是,请注意,为了满足类型系统的需要,我必须将函数和术语包装在fun/num构造函数下面。
因为这个方法是在运行时执行的,所以需要对它进行测试吗
我们有一个基于netty的网络流量密集型Java应用程序/服务器。 旁注:我主要支持这个应用程序,我没有构建它,所以我不知道它的全部内容。 我们有时会收到此错误,如下所示。以前,我们通常在服务器启动3-4天后收到此错误。现在我注意到,即使在重新启动服务器/应用程序后10-15分钟,我们也会收到此错误。 我不明白这怎么可能。这个错误令人担忧吗?我们如何修复它?我记得过去曾对同一个错误进行过广泛的研究
本文向大家介绍数组有没有length()这个方法? String有没有length()这个方法?相关面试题,主要包含被问及数组有没有length()这个方法? String有没有length()这个方法?时的应答技巧和注意事项,需要的朋友参考一下 答:数组没有length()这个方法,有length的属性。String有有length()这个方法。
我想知道如何将此Twilio CURL代码转换为RestClient我被困在请求中。我不知道如何格式化它的顺序传递Twilio SID,令牌,从,到和正文短信。 为此: 这是我的代码,现在编译100%,在我运行代码后,我得到一个响应“完成”没有错误消息,也没有在twilio仪表板上的条目,它不会发送短信,任何想法您的帮助将不胜感激。