分析:非常神的一道題.迭代加深搜尋+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 #includestd:#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;
}
#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 ...