給出乙個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 ...