【动态规划】打家劫舍
【动态规划】打家劫舍 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 输入 2,7,9,3,1 输出 12 基本思路 典型的动态规划,相信有了解的同学很快会写出来。每个房间分成两种情况,劫或不劫。劫则上一家不劫,不劫则劫上一家。 动态转移方程 dp[i]=max(a[i]+dp[i-2],dp[i-1]); # include <bits/stdc++.h> using namespace std ; int main ( ) { int dp [ 100 ] ; int a [ 5 ] = { 2 , 7 , 9 , 3 , 1 } ; dp [ 0 ] = 2 , dp [ 1 ] = 7 ; for ( int i = 2 ; i < 5 ; i ++ ) { dp [ i ] = max ( a [ i ] + dp [ i - 2 ] , dp [ i - 1 ] ) ; } cout << dp [ 4 ] ; } 来源: CSDN 作者: Liquor___ 链接: https://blog.csdn.net/Liquor_