1.最小コスト階段
https://leetcode-cn.com/problems/min-cost-climbing-stairs/
答えを公式のアイデアのように問題のギャングスター・ソリューション、(自分のプラス脚注)
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int c1 = cost[0];
int c2 = cost[1];
int N = cost.size();
for (int i = 2; i < N; ++i) {
int c3 = min(c1, c2) + cost[i];
//从i = 2开始,本层的体力加上min(到达第i - 2层花费体力的最小值,到达第i - 1层花费体力的最小值)
c1 = c2;
//c1为到达第i - 1层花费体力的最小值
c2 = c3;
//c2为到达第i层花费体力的最小值
}
return min(c1, c2);
//比较到N - 1和N - 2花费体力的值
}
};
著者:DA-LI-王
リンクします。https://leetcode-cn.com/problems/min-cost-climbing-stairs/solution/c-dong-tai-gui-hua-ti-jie-by-da-li -Wang-3 /
ソース:滞在ボタン(LeetCode)
の著作権は著者が保有します。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。
この問題を解決するよりよく理解ギャング
class Solution{
public:
int minCostClimbingStairs(vector<int>& cost) {
int num=cost.size();
for(int i=2;i<num;++i)cost[i]+=min(cost[i-1],cost[i-2]);
return min(cost[num-1],cost[num-2]);
}
};
著者:yzwz
リンクします。https://leetcode-cn.com/problems/min-cost-climbing-stairs/solution/xiang-dang-yu-yi-ge-fei-bo-na-qi-shu-lie-by -yzwz /
ソース:滞在ボタン(LeetCode)
著者によって予約の著作権。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。
2.戦利品
https://leetcode-cn.com/problems/house-robber/
問題第ギャングに対する解決策を参照するに、特定の分析(魂が手をペイント)問題の解
考え
タグ:動的プログラミング
、動的プログラミング式:DP [N] = MAX( DP [N-1]、DP [N-2] + NUM)
に隣接するハウジングを破壊しないので、ハウジングは、nの現在の位置にあってもよいです最大盗難、またはN-1は、盗難の最大収容可能であり、またはN-2の最大プラス盗難ハウジング電流値を収容可能であり、最大値はその間にかかる
1室:例盗難33 DPの最大値である[1] = 3,2部屋番号の盗難44 DPの最大値[2] = 4,3番22は、DP、部屋自体NUM = 2の値である[3 = MAX(DP [2] 、DP [1] + NUM)= MAX(4、3 + 2)= 盗難の最大数5,3客室55
時間計算:O(N)O(N )、 nnは配列の長さであります
class Solution {
public int rob(int[] nums) {
int len = nums.length;
if(len == 0)
return 0;
int[] dp = new int[len + 1];
dp[0] = 0;
dp[1] = nums[0];
for(int i = 2; i <= len; i++) {
dp[i] = Math.max(dp[i-1], dp[i-2] + nums[i-1]);
}
return dp[len];
}
}
著者:guanpengchnの
リンクします。https://leetcode-cn.com/problems/house-robber/solution/hua-jie-suan-fa-198-da-jia-jie-she-by-guanpengchn/
出典:滞在ボタン( LeetCode)
の著作権は著者が保有します。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。
私はAを見ていないC ++で書かれてきました
class Solution {
public:
int rob(vector<int>& nums) {
int len = nums.size();
if(len == 0)
return 0;
if(len == 1)
return nums[0];
//nums[1] = max(nums[0], nums[1]);
for(int i = 2; i < len; i++){
nums[i] = max(nums[i] + nums[i - 2], nums[i - 1]);
}
return max(nums[len - 1], nums[len - 2]);
}
};
フレーズがコメントを追加していないため、入力されていませんでした:[2,1,1,2]正しい出力:4
彼らはまだ兄を見て
3.除数ゲーム
https://leetcode-cn.com/problems/divisor-game/
(問題の解決策を見ていないとき、彼らは唯一のアリスを考えるNは= KX、xが等しくない場合は、彼女が勝つことができるNxの3つの非プライム時間を作ります1、N - X =(k - 1 )X = N 'N' 素数にすることはできません)
自分の言葉(言語クラス・ルーチン)における誘導集計の最初の首長で問題を解決するに
は1.アリスは2勝1つの失われたアカウントを占め、
アリスはたったの約現在奇数、奇数の場合は2次は偶数でなければならないように、または、奇数1である;
3.アリス電流が偶数の場合、数が偶数偶数で約奇数が1であってもよいことができ、このように直接マイナス1は、次の奇数、即ち、ボブですGETは奇数でなければならない、アリスは偶数を取得する必要があり、それは2に削減されています。
したがって、その後も勝つ、失うことが奇数であります
class Solution:
def divisorGame(self, N: int) -> bool:
target = [0 for i in range(N+1)]
target[1] = 0 #若爱丽丝抽到1,则爱丽丝输
if N<=1:
return False
else:
target[2] = 1 #若爱丽丝抽到2,则爱丽丝赢
for i in range(3,N+1):
for j in range(1,i//2): #没学过爬虫,意思应该是从1到i的根号(?),j代表x
# 若j是i的余数且target[i-j]为假(0)的话,则代表当前为真(1)
if i%j==0 and target[i-j]==0: #鲍勃拿到i - j,而target[i - j] = 0代表失败,鲍勃失败爱丽丝的target[i] = 1
target[i] = 1
break
return target[N]==1
著者:pandawakaka
リンクします。https://leetcode-cn.com/problems/divisor-game/solution/python3gui-na-fa-by-pandawakaka/
出典:滞在ボタン(LeetCode)
著者によって予約の著作権。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。
4.分析配列
https://leetcode-cn.com/problems/is-subsequence/
ボー最初のダイナミックプログラミングのタイトルで書かれている、ではないが、動的計画法-
class Solution {
public:
bool isSubsequence(string s, string t) {
int len1 = s.length();
long long len2 = t.length();
long long ma = len2;
for(int i = len1 - 1; i >= 0; i--){
bool f = false;
for(int j = ma - 1; j >= 0; j--){
if(s[i] == t[j]){
ma = j;
f = true;
break;
}
}
if(f == false){
return false;
}
}
return true;
}
};