非常有意思的 dp,很難想出來吧.
如果對著圖去想,很難有思路,所以可以把圖上的問題轉化為序列問題.
我們發現,如果乙個點集合法,當且僅當這個點集構成乙個不降序列,且其他點都與這個點集形成逆序對.
令 $f[i]$ 表示由 $1$ ~ $i$ (選 $i$ )構成的合法方案數.
然後如果不選乙個元素,顯然這個元素必須和距離該元素最近的被選元素形成逆序對.
假設我們求完 $f[i]$,要去更新 $j$ ($j>i$),則如果中間元素大於 $a[i]$,則中間元素必須大於 $a[j]$.
小於的情況同理(只要記住更新最大值位置就行)
#include #define n 1009#define ll long long
#define mod 1000000007
#define setio(s) freopen(s".in","r",stdin)
using namespace std;
int val[n][n],f[n];
int main()
f[0]=1;
for(int i=0;i<=n;++i)
} printf("%d\n",f[n+1]);
return 0;
}
BZOJ4715 囚人的旋律 DP
我們令a i 表示看守的第i扇門對應囚犯的哪一扇門。令圖g為有n個節點的圖,編號為1 n。對於滿足1 ia j 那麼在g中編號為i和j的節點之間連一條邊。得到的圖g被稱為逆序圖。對於圖g v,e 非空點集s v是乙個獨立集當且僅當對於任意兩個點u,v v,不存在 u,v e。而s是乙個覆蓋集當且僅當...
NOIP2013模擬10 23囚人的旋律
題目大意 給定乙個逆序圖,表示若a i a j i j 那麼i向j連一條邊 這裡是給定邊數 問有多少個選點方案,是的選定的點之間沒有連邊,沒選定的點與選定的點中至少乙個點有連邊。由於逆序圖能對應乙個序列,那麼我們將對應的圖轉成序列 題目保證 存在至少乙個序列 按照題目描述中所述方法得到的逆序圖是給定...
BZOJ4498 魔法的碰撞 DP
我們先考慮全部緊湊的情況,也就是沒有多餘的空格的情況 將d id i di 先不考慮魔法師佔的空間 這裡用了乙個很巧妙的方法,多加一維,表示預留的空位。加入a會有三種情況 e表示空位 a,ae或ea,eae。對於第一種,表示a兩邊都有魔法師。對於第二種,表示a的一邊有,一邊沒有。對於第三種,表示a的...