noip模擬賽 星空

2022-05-01 07:48:07 字數 2322 閱讀 8118

分析:非常神的一道題.迭代加深搜尋+rand可以騙得20分.狀壓n的話只有24分,必須對問題進行乙個轉化.

在爆搜的過程中,可以利用差分來快速地對乙個區間進行修改,把一般的差分改成異或型的差分:

b[i] = a[i] ^ a[i + 1],每次翻轉操作實際上就是在b[l-1]取反,b[r]上取反.那麼先對原序列建乙個差分陣列,實際上的操作就是在對這個差分陣列進行操作:每次可以選兩個數取反,問多少次能夠把這個陣列中的所有元素全部變成1.這是乙個很神奇的轉化.

每次取反的兩個數長度都是固定的.兩種情況:1.將1,0取反. 2.將0,0取反.其實第一種操作完全是不必要考慮的,因為這種情況下就是把0挪到了另乙個位置罷了.對於第二種操作,可以理解為把這兩個0給「消」去.那麼題目就變成了最少用多少次操作能夠把所有的0給消掉.

每一次操作都會把0移動固定的位置,只有當兩個0的位置重疊,這兩個0才會被消掉。

問題還可以接著轉化:有n個物品,每次取出還沒有被消掉的兩個物品,將它們消掉,問最小的代價.k非常小,這就是典型的狀壓dp了,和noip2016憤怒的小鳥差不多,只不過那道題可以消掉多個.先對每個0求到其他能到達的位置的最短路(最小代價),f[i]表示i這個狀態的最小代價,如果i上的第j位為1,說明第j個0已經被消掉了,狀態轉移方程很明顯,每次找兩個沒消掉的消就好了,具體見**.

20分暴力:

#include #include 

#include

#include

#include

#include

using

namespace

std;

int n, k, m, a[40010], b[40010], cha[40010], dep = 1, vis[70][40010], temp[40010

];bool flag = false

;bool

check()

return

true;}

void dfs(int

d)

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

for (int j = 1; j + b[i] - 1

<= n; j++)

if (!vis[i][j])

}int

main()

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

scanf("%d

", &b[i]);

if (n <= 16

) }}

else

return0;

}

std:

#include #include 

#include

#include

#include

#include

#include

using

namespace

std;

const

int inf = 0x7ffffff

;typedef

long

long

ll;int n, k, m, b[70], a[40010], cnt, d[20][40010], f[1

<< 19

];pair

p[20

];queue

q;void bfs(pair s)

if (x + b[i] <= n && d[s.first][x + b[i]] > d[s.first][x] + 1

) }}

}int solve(int

statuu)

intmain()

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

scanf("%d

", &b[i]);

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

if (a[i] != a[i + 1

]) //實質上就是差分

for (int i = 0; i < cnt; i++)

bfs(p[i]);

memset(f, -1, sizeof

(f));

printf(

"%d\n

", solve((1

<< cnt) - 1

));

return0;

}

noip模擬賽 星空

分析 博弈論.單個博弈通用的解法是dp,設f i j 0 為如果在 i,j yuri先走能否獲勝,f i j 1 為chito能否獲勝,對應的就是必勝態和必敗態的轉移.如果f i 1 j 1 f i 1 j 1 1 f i j 1 1 都為1,那麼f i j 0 為0,否則為1,就是說如果yuri接...

noip模擬賽 密碼

表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...

NOIP模擬賽 老師

題目描述 一座有n層的教學樓裡有一些學生,第i 0 i n 層有studentsi個學生。你被給定了乙個數k,如果第i層有x個學生,那麼這一層需要 x k 個老師。你可以調整每個學生的樓層,但是每個學生至多只能調整一層,就是說第i層的學生只能去第i 1層 如果有的話 第i層 第i 1層 如果i 1 ...