package OJ;
import java.util.*;
import java.util.regex.Matcher;
public class Bully {
/*
* 动态规划——基础
* 1.最大连续子序列之和
* 2.数塔问题
* */
public static void main(String[] args) {
// fun1();
// fun2();
}
//2.数塔问题
private static void fun2() {
int[][] data = {{9,0,0,0,0},{12,15,0,0,0},{10,6,8,0,0},{2,18,9,5,0},{19,7,10,4,16}};
int n = data.length;
for(int i=n-2;i>=0;i--){
for(int j=0;j<=i;j++){
data[i][j] += (data[i+1][j]>data[i+1][j+1]?data[i+1][j]:data[i+1][j+1]);
}
}
sop(data[0][0]);
}
//1.最大连续子序列之和
private static void fun1() {
int[] data = {-2,11,-4,13,-2,5};
int sum = 0;
int max = 0;
for(int i=0;i<data.length;i++){
sum = sum+data[i];
if(sum>max)
max = sum;
if(sum<0)
sum = 0;
}
sop(max);
}
public static void sop(Object o){
System.out.println(o);
}
}
import java.util.*;
import java.util.regex.Matcher;
public class Bully {
/*
* 动态规划——基础
* 1.最大连续子序列之和
* 2.数塔问题
* */
public static void main(String[] args) {
// fun1();
// fun2();
}
//2.数塔问题
private static void fun2() {
int[][] data = {{9,0,0,0,0},{12,15,0,0,0},{10,6,8,0,0},{2,18,9,5,0},{19,7,10,4,16}};
int n = data.length;
for(int i=n-2;i>=0;i--){
for(int j=0;j<=i;j++){
data[i][j] += (data[i+1][j]>data[i+1][j+1]?data[i+1][j]:data[i+1][j+1]);
}
}
sop(data[0][0]);
}
//1.最大连续子序列之和
private static void fun1() {
int[] data = {-2,11,-4,13,-2,5};
int sum = 0;
int max = 0;
for(int i=0;i<data.length;i++){
sum = sum+data[i];
if(sum>max)
max = sum;
if(sum<0)
sum = 0;
}
sop(max);
}
public static void sop(Object o){
System.out.println(o);
}
}
本文通过两个典型实例:最大连续子序列之和及数塔问题,深入浅出地介绍了动态规划的基本思想与实现方法。通过对具体问题的分析,读者可以更好地理解如何运用动态规划解决实际问题。
365

被折叠的 条评论
为什么被折叠?



