ブラッシングの質問を記録する-(leetcode-198家の強盗)

件名:あなたはプロの泥棒で、通り沿いの家を盗むことを計画しています。各部屋には一定額の現金が隠されています。盗難に影響を与える唯一の制限要因は、隣接する家に相互接続された盗難防止システムが装備されていることです。2つの隣接する家が同じ夜に泥棒に侵入された場合、システムは自動的に警告します。
各家に保管されている金額を表す非負の整数の配列が与えられた場合、警報装置に触れずに1晩に盗むことができる最大金額を計算します。
例1:
入力:[1,2,3,1]
出力:4
説明:家1(金額= 1)を盗み、次に家3(金額= 3)を盗みます。
盗まれた最大量= 1 + 3 = 4。
例2:
入力:[2,7,9,3,1]
出力:12
説明:家1(金額= 2)を盗み、家3(金額= 9)を盗み、次に家5(金額= 1)を盗みます。
盗まれた最大量= 2 + 9 + 1 = 12。
出典:LeetCode
リンク:https ://leetcode-cn.com/problems/house-robber
著作権はLeetCodeが所有しています商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。

アイデア:動的計画法
コード:

int rob(int* nums, int numsSize){
    
    
    int dp[numsSize+1];
    if(numsSize==0)
        return 0;
    dp[0]=nums[0];
    if(numsSize>1)
    dp[1]=nums[0]>nums[1]?nums[0]:nums[1];
    for(int i=2;i<numsSize;i++){
    
    
        int temp1=dp[i-2]+nums[i];
        int temp2=dp[i-1];
        dp[i]=temp1>temp2?temp1:temp2;
    }
    return dp[numsSize-1];
}

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/lthahaha/article/details/106428799