DP 石頭剪刀布

2021-08-17 23:05:13 字數 1001 閱讀 4756

小明和小頭遇到了矛盾,他們決定用男人的方式解決戰鬥——石頭剪刀布。但是小菜覺得石頭剪刀布已經過時了,於是他發明了另乙個更男人的遊戲。小菜給出乙個自然數n,小明和小頭輪流操作,每次操作可以把n減去n所擁有的數字中的最大值或者最小值(不包括0),不能操作者輸(即當n=0時)。

小菜怕他們不懂,於是給了乙個例子n=1024,則最大值=4,最小值=1。假如小明先操作,那麼他可以留給小頭1023或者1020。

小明和小頭覺得這個遊戲很好玩,於是打算多玩幾局。每次由小明先操作,如果兩人都是用最佳策略,請問誰會贏?

input

第一行只有乙個整數t,表示玩t輪遊戲

接下來t行,每行乙個自然數n,表示初始時小菜給出的自然數。

output

共t行,如果小明贏了第i輪遊戲則在第i行輸出「yes」 否則輸出「no」

sample input

2 9

10sample output

yes

nodata constraint

【資料規模】

40%的資料n≤50

100%的資料t≤100,n≤1000000

顯然我們發現這個輸贏是奇偶分配的,所以可以轉移動態

fi=!fj

那麼j是什麼呢?

就是i-i中最大值和i-i中最小值,那麼設這兩為j,k得

fi=!fj∨!fk

那麼我們預處理1~10^6的所有值即可

#include 

#include

#define rep(i,a,b) for (i=a;i<=b;i++)

using

namespace

std;

int t,n,i,j;

bool f[1000001];

int main()

x/=10;

}f[i]=!f[i-mxn]||!f[i-mnn];

}rep(i,1,t)

}

石頭剪刀布(概率DP)

上來題意就理解錯了,題意並不是你可以通過前面的對手來判斷接下來的對手,而是讓你通過前面對手的操作來決策。定義 g i j k 表示對手出了 i 個石頭,j 個剪刀,k 個布的概率。f i j k q 表示對手出了 i 個石頭,j 個剪刀,k 個布,下乙個將出 q 的概率。注 下面及 中用 1 表示石...

剪刀石頭布

開始學習時寫的剪刀石頭布 雖然是用c 寫的 我感覺思想還是面向過程 慚愧慚愧 include include include include includeusing namespace std enum caiquan class inte cet inte cet inte cet system...

石頭剪刀布

題目描述 石頭剪刀布是常見的猜拳遊戲 石頭勝剪刀,剪刀勝布,布勝石頭。如果兩個人出拳一樣,則不分勝負。在 生活大 第二季第 8 集中出現了一種石頭剪刀布的公升級版遊戲。公升級版遊戲在傳統的石頭剪刀布遊戲的基礎上,增加了兩個新手勢 斯波克 星際迷航 主角之一。蜥蜴人 星際迷航 中的反面角色。這五種手勢...