動態規劃 RQNOJ 購物問題

2021-05-23 01:08:42 字數 922 閱讀 8457

由於換季,商場推出優惠活動,以超低****若干種商品。但是商場為避免過分虧本,規定某些商品不能同時購買,而且每種超低價商品只能買一件。身為顧客的你想獲得最大的實惠,也就是爭取節省最多的錢。經過仔細研究,我們發現商場**的超低價商品中,不存在以下這種情況:n(n>=3)種商品c1,c2,c3,……,cn,其中ci和ci+1是不能同時購買的(i=1,2,……,n-1),而且c1和cn也不能同時購買。

請程式設計計算可以接生的最大金額數。

第一行兩個整數k,m(1<=k<=1000),其中k表示超低價商品數,k種商品的編號依次為1,2,3,……,k;m表示不能同時購買的商品對數。

接下來k行,第i行有乙個整數xi表示購買編號為i的商品可以節省的金額(1<=xi<=100)。

再接下來m行,每行兩個數a,b,表示a和b不能同時購買,1<=a,b<=k,a≠b。

僅一行乙個整數,表示能節省的最大金額數。

三維狀態影象

樹形動態規劃。

因為是乙個森林,所以列舉每乙個點,如果當前點沒有被放入森林中,以當前點為根建一棵樹。樹滿足性質:子節點和父節點不可同時取到。

記錄兩個狀態f[x][1]和f[x][2],分別表示取x和不取x。

int g[1001][1001],t[1001][1001],f[1001][3],d[1001];

int a,b,k,m,ans;

bool h[1001];

void build_tree(int x)

}void dp(int x)

else

f[x][1]+=d[x];

}}int main()

for (int i=1;i<=k;++i)

if (g[i][0]==0)

else

if (!h[i])

printf("%d/n",ans);

return 0;}

動態規劃 RQNOJ 馬棚問題

每天,小明和他的馬外出,然後他們一邊跑一邊玩耍。當他們結束的時候,必須帶所有的馬返回馬棚,小明有k個馬棚。他把他的馬排成一排然後跟隨它走向馬棚,因為他們非常疲勞,小明不想讓他的馬做過多的移動。因此他想了乙個辦法 將馬按照順序放在馬棚中,後面的馬放的馬棚的序號不會大於前面的馬放的馬棚的序號。而且,他不...

購物(動態規劃)

傳送門 在遙遠的東方,有一家糖果專賣店。這家糖果店將會在每天 一些糖果,它每天都會生產出m個糖果,第i天的第j個糖果 為c i j 元。現在的你想要在接下來的n天去糖果店進行選購,你每天可以買多個糖果,也可以選擇不買糖果,但是最多買m個。因為最多隻生產m個 買來糖果以後,你可以選擇吃掉糖果或者留著之...

動態規劃 RQNOJ 方格取數

設有n n的方格圖 n 10,我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 某人從圖的左上角的a 點出發,可以向下行走,也可以向右走,直到到達右下角的b點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從a點到b 點共走兩次,試找出2條這樣的...