NOIp 2015 Day1T3鬥地主 搜尋

2022-05-10 05:32:37 字數 3157 閱讀 1640

題目傳送門

昨天真題測試賽題目==

沒想到一道純到都不用剪枝的搜尋會是noipt3難度。

不過因為我搜尋弱啊所以打不出來==

la:這不就是一道簡單模擬題麼

碼完此題能增加對搜尋的理解==

(閒話結束)

搜尋,我們就是要遍歷每乙個可能的狀態,來尋取最優解。每次我們嘗試取到乙個狀態,然後遞迴回溯,之後恢復原來的狀態。

1 #include2 #include3 #include4

5using

namespace

std;67

int t,n,no,x,ans=19260817;8

int tong[20];9

10void dfs(int

now)11

26}27 cnt=0;28

for(int i=3;i<=14;i++)

29 41}

42 cnt=0;43

for(int i=3;i<=14;i++)

44 56}

57for(int i=3;i<=15;i++)

58

73 tong[j]++;74}

75for(int j=3;j<=15;j++)

76if(tong[j]>=2

)77

86 tong[j]+=2;87

}88 dfs(now+1

);89

//three card

90 tong[i]+=4;91

}92}93

for(int i=3;i<=15;i++)

94105

for(int j=3;j<=15;j++)

106if(tong[j]>=2

)107

112 dfs(now+1);//

3 single

113 tong[i]+=3

;114

}115

}116

if(tong[16]==2) now++;

117else

if(tong[16]==1) now++;

118for(int i=3;i<=15;i++) if(tong[i]) now+=tong[i]>>1

;119

for(int i=3;i<=15;i++) if(tong[i]) now+=tong[i]&1

;120 ans=min(ans,now);

121}

122123

intmain()

124136 dfs(0

);137 printf("

%d\n

",ans);

138 ans=19260817

;139 memset(tong,0,sizeof

(tong));

140}

141return0;

142 }

無注釋版

1 #include2 #include3 #include4

5using

namespace

std;67

int t,n,no,x,ans=19260817;8

int tong[20];9

10void dfs(int

now)11

26}27 cnt=0;28

for(int i=3;i<=14;i++)

29 41}

42 cnt=0;43

for(int i=3;i<=14;i++)

44 56}

57for(int i=3;i<=15;i++)

58

73 tong[j]++;//

狀態的恢復都是對稱的 74}

75for(int j=3;j<=15;j++)

76if(tong[j]>=2

)77

86 tong[j]+=2;87

}88 dfs(now+1

);89

//three card

90 tong[i]+=4;91

}92}93

for(int i=3;i<=15;i++)

94105

for(int j=3;j<=15;j++)

106if(tong[j]>=2

)107

112 dfs(now+1);//

3 single

113 tong[i]+=3

;114

}115

}116

if(tong[16]==2) now++;

117else

if(tong[16]==1) now++;

118for(int i=3;i<=15;i++) if(tong[i]) now+=tong[i]>>1;//

出對子牌

119for(int i=3;i<=15;i++) if(tong[i]) now+=tong[i]&1;//

出單張牌 兩者用位運算簡化

120 ans=min(ans,now);//

更新答案

121}

122123

intmain()

124136 dfs(0);//

現在已經出了0張牌

137 printf("

%d\n

",ans);

138 ans=19260817

;139 memset(tong,0,sizeof

(tong));

140}

141return0;

142 }

有注釋版

NOIP2015提高組D1T3 鬥地主

問一副排n張,n 23最少打幾次打完,資料組數t 100。面向資料程式設計。前30分 亂暴力?沒有順子,把單 對子 炸彈 三張 王炸 三帶一判一次即可。前70分 狀壓,先預處理哪些狀態能一次出完,用這些狀態來轉移,2 n n t。實際得分可能比期望的高一些?滿分 如果不打順子,最優策略是可以確定的,...

NOIP 2015 day2 T3 運輸計畫

time 2018 9 27 題目大意 資料範圍 1 n m 300000 0 v al 1000 time limit 1000ms memory limit 256mb 1 n,m 300000 0 val 1000 text text 1 n m 3 0000 00 v al 1 000tim...

NOIP2015Day2T3 運輸計畫

題解 二分答案。假設列舉到答案是xxx。找出所有長度大於x xx的鏈,那麼這些鏈上必須要放蟲洞,而且必須放在一條所有鏈都經過的邊上,否則必然有一條鏈的長度是大於x xx的。這個直接差分就能求出所有鏈都經過的邊,並且把最長的那條改為蟲洞,看看所有邊是否合法,則可判斷x xx是否可行。應該不是很難吧。比...