問題:
給你乙個二維陣列,二維陣列中的每個數都是正數,要求從左上角走到右下角,每一步只能向右或者向下。沿途經過的數字要累加起來。返回最小的路徑
經典的動態規劃問題
請記住這樣一句話:每乙個優美的動態規劃,都來自原先暴力的嘗試
package class_08;
public class code_07_minpath
public static int process1(int matrix, int i, int j)
if (i == 0 && j != 0)
if (i != 0 && j == 0)
return res + math.min(process1(matrix, i, j - 1), process1(matrix, i - 1, j));
} public static int minpath2(int m)
int row = m.length;
int col = m[0].length;
int dp = new int[row][col];
dp[0][0] = m[0][0];
for (int i = 1; i < row; i++)
for (int j = 1; j < col; j++)
for (int i = 1; i < row; i++)
} return dp[row - 1][col - 1];
} // for test
public static int generaterandommatrix(int rowsize, int colsize)
int result = new int[rowsize][colsize];
for (int i = 0; i != result.length; i++)
} return result;
} public static void main(string args) , , , };
system.out.println(minpath1(m));
system.out.println(minpath2(m));
m = generaterandommatrix(6, 7);
system.out.println(minpath1(m));
system.out.println(minpath2(m));
}}
附加題:
給你乙個陣列arr,和乙個整數aim。如果可以任意選擇arr中的數字,能不能累加得到aim,返回true或者false。
package class_08;
public class code_08_money_problem
public static boolean process1(int arr, int i, int sum, int aim)
// sum != aim
if (i == arr.length)
return process1(arr, i + 1, sum, aim) || process1(arr, i + 1, sum + arr[i], aim);
} public static boolean money2(int arr, int aim)
for (int i = arr.length - 1; i >= 0; i--)
}} return dp[0][0];
} public static void main(string args) ;
int aim = 12;
system.out.println(money1(arr, aim));
system.out.println(money2(arr, aim));
}}
乘積最小問題
乘積最小問題 今天看到三個這樣的題 最小乘積生成樹,hnoi2014 畫框,不講武德 大概就是乙個物品有兩種特徵值 a,b 他的代價是 sum a times sum b p5540 最小乘積生成樹 第一感覺這種題和 wqs 二分有點關係,結果發現沒有什麼關係.這種題都是一種套路吧,第一次見的話很難...
字典序最小問題
給定長度為n的字串s,要構造乙個長度為n的字串t。起初,t 是乙個空串,隨後反覆進行下列 任意 操作。1 從 s 的頭部 刪除乙個 字元,加到 t的 尾部 2 從 s 的尾部 刪除乙個 字元,加到 t 的 尾部 你的 目標是 要構造字典序盡可能小的字串 t。s 只包含大寫英文本母 輸入10 asdf...
簡單的最大最小問題
例表tb id price netprice 1 8.00 20.00 2 10.00 5.00 3 0.00 3.00 我想要查出price與netprice之間大的列 比如查出如下資料 id newprice 1 20.00 2 10.00 3 3.00 sql語句要怎麼寫?create tab...