1. 程式人生 > >揹包問題與動態規劃狀態轉移方程1

揹包問題與動態規劃狀態轉移方程1

阿福是一名經驗豐富的大盜。趁著月黑風高,阿福打算今晚洗劫一條街上的店鋪。

這條街上一共有 N 家店鋪,每家店中都有一些現金。阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街上的報警系統才會啟動,然後警察就會蜂擁而至。

作為一向謹慎作案的大盜,阿福不願意冒著被警察追捕的風險行竊。他想知道,在不驚動警察的情況下,他今晚最多可以得到多少現金?


輸入的第一行是一個整數 T (T <= 50) ,表示一共有 T 組資料。

接下來的每組資料,第一行是一個整數 N (1 <= N <= 100, 000) ,表示一共有 N 家店鋪。第二行是 N 個被空格分開的正整數,表示每一家店鋪中的現金數量。每家店鋪中的現金數量均不超過 1000 。

//顯然此問題屬於揹包問題,狀態轉移方程為f[i]=max(f[i-2]+a[i],f[i-1]);對於每一家店鋪,如果不盜搶,看f[i-1],盜搶,看f[i-2]+a[i]看兩者的最大值。邊界為f[0]=0;f[1]=a[1];

f[1]=a[1];

for (int i=2;i<=n;++i)  

f[i]=max(f[i-2]+a[i],f[i-1]);

//思考,找方程也就是找規律,如果取第3個,它此時的最大值是a3+f1與a2之間最大值,如果取4 個,a4+f2和f3之間最大值

一直到fn是其可得到的最大值。完結


阿福是一名經驗豐富的大盜。趁著月黑風高,阿福打算今晚洗劫一條街上的店鋪。

這條街上一共有 N 家店鋪,每家店中都有一些現金。阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街上的報警系統才會啟動,然後警察就會蜂擁而至。

作為一向謹慎作案的大盜,阿福不願意冒著被警察追捕的風險行竊。他想知道,在不驚動警察的情況下,他今晚最多可以得到多少現金?