牛客 牛妹愛數列 K K K

2022-06-18 01:24:13 字數 863 閱讀 3081

思路: 剛開始考慮的是貪心,讓sum=0 遇到1就++ 0則-- 找到sum最大的時候,在這個時候反轉一次, 這樣是會漏情況的   如  0 0 0 0 0 1 1 1  可以把0變為1 再全部變為0

那麼只能考慮dp了  首先要確定dp的意義,根據要求的  肯定是要dp[n]為前n為都為0的  ,那麼考慮把dp[i]定為 前i位都位0的最少運算元, 再考慮轉移,

假設當前為1   可以由前一位都是0的轉移而來 在+1, 也可以由前面全為1的翻轉一次直接得來,所以就需要把前i位全為1的運算元也記錄下來,那麼就開二維dp

dp[i][1] dp[i][0] 表示前i位全為0/1 的最小運算元   注意初始化即可

1 #include2

using

namespace

std;

3#define ll long long

4#define pb push_back

5const

int maxn =1e5+10;6

const

int mod=1e9+7;7

inta[maxn];89

int dp[maxn][2

];10

1112

13int

main()

1423

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

2428 dp[0][0]=dp[0][1]=0;29

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

3036

else

3741

}42 cout<0]<

;434445

4647

4849 }

view code

線性dp 牛妹愛數列

題目大意 有乙個長度為n的序列a,保證它是乙個01序列,並執行以下兩種操作 1.單點修改 將位置x上的數翻轉 0變1,1變0 2.字首修改 將位置1 x上的數翻轉 每個數都0變1,1變0 他現在想要最小化翻轉次數,使得數列上的所有數都變為0。資料保證 1 le n le 10 5,0 le a i ...

牛妹愛數列(動態規劃 dp)

題目描述 牛妹正在玩乙個數列 他手裡有乙個長度為n的序列a,保證它是乙個01序列,並執行以下兩種操作 1.單點修改 將位置x上的數翻轉 0變1,1變0 2.字首修改 將位置1 x上的數翻轉 每個數都0變1,1變0 他現在想要最小化翻轉次數,使得數列上的所有數都變為0。輸入描述 第一行,輸入乙個數n。...

NowCoder 練習 牛妹愛數列(DP)

牛妹愛數列 他手裡有乙個長度為n的序列a,保證它是乙個01序列,並執行以下兩種操作 他現在想要最小化翻轉次數,使得數列上的所有數都變為0。輸出最小翻轉次數 示例1 輸出 min dp n 0 dp n 1 1 include using namespace std pragma gcc optimi...