JZYZOJ 1385 拉燈遊戲 狀態壓縮 搜尋

2022-05-26 09:30:08 字數 1450 閱讀 2252

剛開始想的時候一直以為同一排不同的拉燈順序對結果是有影響的,手推了好多遍才發現拉燈結果只和拉的燈有關,這也要打表,可以說非常智障了。

如果從上向下尋找拉的燈,那麼每一排全暗主要相關的是下一排(通過下一排補齊)和初始狀態,而每一排的初始狀態是和其本身和上一排有關的,那麼只要找出第一排所有的拉燈方案(2^5種)然後對這幾種方案模擬一遍找能全亮且步數最小的方案。

鍛鍊搜尋能力的好題

注意小於6步…交的時候沒看見,日常眼瞎1/1。

**

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8const

int maxn=(1

<<5)+10;9

int a[6]={};

10char ch[10]={};

11int f[maxn]={};//

第一行運算元量

12int f1[maxn]={};//

第一行操作對第二行的影響

13int nn[maxn]={};//

第一行操作後得到的數

14//

以上三個通過dfs計算

15int aa[maxn]={};//

下一行來填滿這一行對下一行的影響

16int bb[maxn]={};//

對下下一行的影響

17int z[maxn]={};//

運算元量

18//

以上三個預處理

19int ma=maxn-11;20

void dfs1(int k,int num,int d,int

z)25

int w=1

<

26if(k>=1)w1=(7

<

27else w1=7/2

;28 dfs1(k+1

,num,d,z);

29 dfs1(k+1,num^w1,d+1,z^w);30}

31int

main()

44 bb[i]=(~i)&ma;45}

46while(t-->0

)54 }memset(f,63,sizeof

(f));

55int da=f[1

];56 dfs1(0,a[1],0,0

);57

int ans=da;

58for(int i=0;i<=ma;i++)67}

68if(ans>6)printf("

%d\n

",-1

);69

else printf("

%d\n

",ans);70}

71return0;

72 }

view code

JZYZOJ1237 教授的測試 dfs

鍛鍊搜尋的 能力,不錯的題。開始對dfs到底向下傳遞什麼搞不清楚,需要想一下,noip難度的題還有這種情況,果然還是太蒻。1 include2 include3 include4 include5 include6 include7 include8 using namespace std 9int...

138 子陣列之和

原題 there is at least one subarray that it s sum equals to zero.您在真實的面試中是否遇到過這個題?是 標籤雜湊表 子陣列思路1 設定兩根指標start與end,每次查詢固定start,end向右移動,遍歷陣列,找到和為0的return出去...

JZYZOJ1330 土地購買 dp 斜率優化

不用long long的話只能ac一半的點而且完全查不出來錯.放棄cin保平安.x i y i 分別為第i塊土地的長和寬,輸入後需要排序然後去掉冗餘資料,最後得到的x i 遞增y i 遞減 或者y i 遞增x i 遞減 因為如果x i x j 的同時y i y j 則j是不必要存在的,可以把它和i一...