阿福是一名經驗豐富的大盜。趁著月黑風高,阿福打算今晚洗劫一條街上的店鋪。
這條街上一共有 n 家店鋪,每家店中都有一些現金。
阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街上的報警系統才會啟動,然後警察就會蜂擁而至。
作為一向謹慎作案的大盜,阿福不願意冒著被警察追捕的風險行竊。
他想知道,在不驚動警察的情況下,他今晚最多可以得到多少現金?
輸入的第一行是乙個整數 tt,表示一共有 tt 組資料。
接下來的每組資料,第一行是乙個整數 nn ,表示一共有 nn 家店鋪。
第二行是 nn 個被空格分開的正整數,表示每一家店鋪中的現金數量。
每家店鋪中的現金數量均不超過1000。
對於每組資料,輸出一行。
該行包含乙個整數,表示阿福在不驚動警察的情況下可以得到的現金數量。
1≤t≤501≤t≤50,
1≤n≤1e5
2
31 8 2
410 7 6 14
8
24
#include#include#include#includeusing namespace std;
const int maxn=1e5+10;
int f[maxn][2];
int ans;
int t,n;
int a[maxn];
void dp()
}int main(){
cin>>t;
while(t--){
memset(a,0,sizeof(a));
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
dp();
ans=max(f[n][0],f[n][1]);
cout《很顯然是狀態機模型,定義兩種狀態,0:表示當前這家店沒有偷,1:表示偷了當前這家店
因此狀態轉移方程為
f[i][0]=max(f[i-1][0],f[i-1][1]);
f[i][1]=f[i-1][0]+a[i];// 因為不能連續偷兩家店,所以前乙個狀態一定為零
初始化:當f[0][0]是零的時候,上面的狀態轉移方程成立;
AcWing 1049 大盜阿福
題目描述 阿福是一名經驗豐富的大盜。趁著月黑風高,阿福打算今晚洗劫一條街上的店鋪。這條街上一共有 n家店鋪,每家店中都有一些現金。阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街上的報警系統才會啟動,然後警察就會蜂擁而至。作為一向謹慎作案的大盜,阿福不願意冒著被警察追捕的風險行竊。他想知道,...
23 大盜阿福
描述 阿福是一名經驗豐富的大盜。趁著月黑風高,阿福打算今晚洗劫一條街上的店鋪。這條街上一共有 n 家店鋪,每家店中都有一些現金。阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街上的報警系統才會啟動,然後警察就會蜂擁而至。作為一向謹慎作案的大盜,阿福不願意冒著被警察追捕的風險行竊。他想知道,在...
23 大盜阿福
阿福是一名經驗豐富的大盜。趁著月黑風高,阿福打算今晚洗劫一條街上的店鋪。這條街上一共有 n 家店鋪,每家店中都有一些現金。阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街上的報警系統才會啟動,然後警察就會蜂擁而至。作為一向謹慎作案的大盜,阿福不願意冒著被警察追捕的風險行竊。他想知道,在不驚動...