GDKOI2016 Day2 T1 染色大戰

2021-07-10 07:26:16 字數 901 閱讀 5746

給出乙個n*m的格點圖,每個點有黑色和白色兩種狀態。有a,b兩個人輪流操作,a先手。每一次操作可以把乙個白點染成黑點。若這次染色產生了新的簡單黑色正方形(即最小的正方形,四個頂點都為黑色),則獲得其得分,並獎勵多一次染色。求兩人都在最優策略的情況下,a的得分-b的得分的值。

簡單博弈。只要會博弈就會做。很顯然,a想讓答案變大,b想讓答案變小。在遞迴時記錄當前的狀態和是誰操作,直接搜尋就行了。注意加上記憶化。

#include

#include

#include

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

#define fd(i,a,b) for(int i=a;i>=b;i--)

#define inf 0x7fffffff

#define n 8

#define m 2100005

using namespace std;

int a[n][n],c[n][n],f[m],mi[n][n],n,m,t,p;

int pd(int x,int y)

int max(int x,int y)

int dfs(int x,int

id)

f[id+x*p]=ret;return ret;

}int main()

fo(i,1,n) fo(j,1,m) scanf("%d",&a[i][j]);

id=0;fo(i,1,n) fo(j,1,m) id=id*2+a[i][j];

fo(i,1,n-1) fo(j,1,m-1) scanf("%d",&c[i][j]);

printf("%d",dfs(0,id));

}

2016國慶清北Day2T1

pa 題目描述 漢諾塔公升級了 現在我們有n個圓盤和n個柱子,每個圓盤大小都不一樣,大的圓盤不能放在小的圓盤上面,n個柱子從左到右排成一排。每次你可以將一 個柱子上的最上面的圓盤移動到右邊或者左邊的柱子上 如果移動之後是合法的 話 現在告訴你初始時的狀態,你希望用最少的步數將第i 大的盤子移動到第i...

組合數問題 NOIP 2016 Day2 T1

題目描述 組合數 表示的是從n個物品中選出m個物品的方案數。舉個例子,從 1,2,3 三個物品中選擇兩個物品可以有 1,2 1,3 2,3 這三種選擇方法。根據組合數的定 義,我們可以給出計算組合數的一般公式 cm n n m n m 其中n 1 2 n 小蔥想知道如果給定n,m和k,對於所有的0 ...

天天愛跑步 noip2016day1t2

2016年考到一片oier的題目。利用樹上的差分來解決這個問題 先求出兩個節點的lca,然後分成向上跑和向下跑兩個鏈。向上從起點跑到lca,這個過程累加,過了lca,對統計的貢獻就沒有了,減掉。因此就結點來說統計乙個節點有多少人,就觀察點i來說,如果觀察點的值是wi,需要統計觀察點下方deep i ...