\(n\leq 20\)一眼狀壓。
設\(f[i][j]\)表示:訪問狀態為\(i\),當前在\(j\)點的方案數。
我們列舉乙個\(k\),表示下乙個要去的地方;要判斷\(j\)能不能轉移到\(k\),還要列舉\(l\),判斷\(j,k,l\)是否共線。判斷共線是基礎向量,一次點積+一次叉積帶走。
這樣複雜度\(o(n^32^n)\),期望得分\(30\%\)。
**:
#includeusing namespace std;
#define pii pair#define mp make_pair
#define x first
#define y second
const int mod=1e8+7;
int n,f[1<<20][20],lim,res;
pii p[20];
pii operator-(const pii &u,const pii &v)
int operator*(const pii &u,const pii &v)
int operator^(const pii &u,const pii &v)
int main()
// printf("%d\n",ok);
(f[i|(1<=4)for(int j=0;j考慮\(o(n^3)\)預處理出如果能從\(j\)轉移到\(k\)需要選擇的子集。這樣子就可以\(o(1)\)在dp時判斷(即判斷該子集是否是\(i\)的子集)。複雜度\(o(n^22^n)\)。期望得分\(100\%\)。
另:本題卡常,請隨手吸氧。
**:#pragma gcc optimize(3)
#includeusing namespace std;
#define pii pair#define mp make_pair
#define x first
#define y second
const int mod=1e8+7;
int n,f[1<<20][20],lim,res,blk[20][20];
pii p[20];
pii operator-(const pii &u,const pii &v)
int operator*(const pii &u,const pii &v)
int operator^(const pii &u,const pii &v)
int main()
CQOI2018 解鎖螢幕
使用過android手機的同學一定對手勢解鎖螢幕不陌生。android的解鎖螢幕由3x3個點組成,手指在螢幕上畫一條 線將其中一些點連線起來,即可構成乙個解鎖圖案。如下面三個例子所示 畫線時還需要遵循一些規則 1 連線的點數不能少於4個。也就是說只連線兩個點或者三個點會提示錯誤。2 兩個點之間的連線...
CQOI2018 解鎖螢幕
其實只有開了o2才能a.就是我們看到n的範圍這麼小,就想到狀壓dp。然後我們設狀態dp i 表示狀態為i的 二進位制表示該點選或者不選 方案數有多少個。但是我們發現因為還要列舉轉移下乙個點,所以我們還要記錄一下最後的那個點是什麼。於是我們修改狀態為 dp i j 表示當前狀態為i,最後乙個點的編號為...
CQOI 2018 解鎖螢幕
洛谷傳送門 使用過android 手機的同學一定對手勢解鎖螢幕不陌生。android 的解鎖螢幕由3x3 個點組成,手指在螢幕上畫一條線,將其中一些點連線起來,即可構成乙個解鎖圖案。如下面三個例子所示 畫線時還需要遵循一些規則 連線的點數不能少於4 個。也就是說只連線兩個點或者三個點會提示錯誤。兩個...