計蒜客 T3177 蒜頭君的花園 DP入門

2021-10-04 05:41:56 字數 1173 閱讀 8143

蒜頭君的花園裡有 n 個花盆,每個花盆可以種一株花,現在花椰妹給了蒜頭君三種種花的方案

但是花椰妹的每種方案種的都是同一種花,只是形狀不同

全部種 a 花,第 i 盆花的**為 ai​

全部種 b 花,第 i 盆花的**為 bi​

全部種 c 花,第 i 盆花的**為 ci​

可是蒜頭君覺得整個花園都是同一種花不好看,但是他又不想浪費了花椰妹的好意

所以他決定依舊是按照花椰妹的方案來買花,也就是說第 iii 盆花只有三個選項:ai​,bi​,ci​ , 但是他希望相鄰的兩盆花不是同一種花,

所以他希望你可以幫他計算一下,最少需要花多少錢?

第一行只有乙個整數 nnn,表示共有 nnn 個花盆。

第二行有 n 個正整數 ai​

第三行有 n 個正整數 bi​

第四行有 n 個正整數 ci​

輸出僅有一行,該行只有乙個整數,表示最小花費。

對於 30% 的資料,1≤n≤10

對於 70%的資料,11≤n≤30

對於 100%的資料中,1≤n≤100000,1≤ai​,bi​,ci​≤100

輸出時每行末尾的多餘空格,不影響答案正確性

樣例輸入

5 

1 3 1 2 2

1 2 3 4 3

4 2 1 5 3

樣例輸出

9
設v[0/1/2]為前 i 盆花第 i盆花買a,b,c三種的情況,那麼分別進行狀態轉移即可,

v[0][i]=min(v[1][i-1],v[2][i-1])+a[i];

v[1][i]=min(v[0][i-1],v[2][i-1])+b[i];

v[2][i]=min(v[0][i-1],v[1][i-1])+c[i];

#include#includeusing namespace std;

int v[5][100005];

int main()

int sum=min(v[0][n-1],v[1][n-1]);

sum=min(sum,v[2][n-1]);

cout

}

蒜頭君面試 計蒜客

蒜頭君來蒜廠面試的時候,曾經遇到這樣乙個面試題 給定 n nn 個整數,求裡面出現次數最多的數,如果有多個重複出現的數,求出值最大的乙個。當時可算是給蒜頭君難住了。現在蒜頭君來考考你。輸入格式 第一行輸入乙個整數 n 1 n 100000 n 1 le n le 100000 n 1 n 1000 ...

計蒜客 蒜頭君倒水

問題描述 蒜頭君倒了 2 杯熱水在杯子裡面,第一杯裡面有 a 毫公升,第二杯裡面有 b 毫公升。水太熱了,蒜頭君決定通過輪流倒水的方式來讓水冷下來。每次倒水蒜頭君把第一杯的 x 的水倒入第二杯,把第二杯的 y 的水倒入第一杯 蒜頭君有奇特的方法,能讓這一過程是同是發生的,沒有先後之分 蒜頭君一直重複...

計蒜客 蒜頭君回家

樣例輸入 8 10 p.p t s 樣例輸出 思路用兩次bfs,第一次計算出起點到p的距離,第二次計算出t到p的距離,然後迴圈取最小值。但是wa了很多次,找了很久,發現是vis判斷的問題,導致乙個資料更新多次。ac include include include include using name...