Leetcode213. 家を略奪するII(C言語)
7390 ワード
Leetcode213. 家を略奪するII(C言語)
アルゴリズム-ダイナミックプランニング(フィボナッチ):アルゴリズムとデータ構造の参照
あなたはプロの泥棒で、街沿いの家を盗む計画で、どの部屋にも現金が隠されています.この場所はすべての家が囲まれていて、最初の家と最後の家が隣接していることを意味しています.また、隣接する家屋には互いに連通する防犯システムが設置されており、隣接する2つの家屋が同じ夜に泥棒に侵入されると、自動的に警報が鳴る.各家屋の保管金額を表す非負の整数配列を与え、警報装置に触れずに盗むことができる最高金額を計算する.例:入力:[1,2,3,1]出力:4
構想:ダイナミックプランニング.dp[i]=max(dp[i-2]+nums[i],dp[i-1])はリング状なので、最初の家を盗む、最後の家を盗まない、最後の家を盗まない、最後の家を盗む
コード:
アルゴリズム-ダイナミックプランニング(フィボナッチ):アルゴリズムとデータ構造の参照
あなたはプロの泥棒で、街沿いの家を盗む計画で、どの部屋にも現金が隠されています.この場所はすべての家が囲まれていて、最初の家と最後の家が隣接していることを意味しています.また、隣接する家屋には互いに連通する防犯システムが設置されており、隣接する2つの家屋が同じ夜に泥棒に侵入されると、自動的に警報が鳴る.各家屋の保管金額を表す非負の整数配列を与え、警報装置に触れずに盗むことができる最高金額を計算する.例:入力:[1,2,3,1]出力:4
構想:ダイナミックプランニング.dp[i]=max(dp[i-2]+nums[i],dp[i-1])はリング状なので、最初の家を盗む、最後の家を盗まない、最後の家を盗まない、最後の家を盗む
コード:
int rob(int* nums, int numsSize){
if(numsSize==0) return 0;
if(numsSize==1) return nums[0];
int a[numsSize],b[numsSize];
a[0]=nums[0]; a[1]=nums[0]; // , , numSize-1
b[0]=0; b[1]=nums[1]; // , , numSize
for(int i=2;i<numsSize;i++){
a[i]=(a[i-1]>(a[i-2]+nums[i]))?a[i-1]:(a[i-2]+nums[i]);
b[i]=(b[i-1]>(b[i-2]+nums[i]))?b[i-1]:(b[i-2]+nums[i]);
}
return (a[numsSize-2]>b[numsSize-1])?a[numsSize-2]:b[numsSize-1];
}