(題目鏈結)
給出乙個$n*m$的整數矩陣,其中$[1,nm]$中的整數每個出現一次,有一些位置為區域性最小值。問方案數。
好神的dp啊。
$cnt_j$表示的是,在區域性最小值被填充的狀態為$j$的情況下,目前有多少個位置可以填,這些位置中包括已經被填了數的位置。
最後加模再取模
// bzoj2669#include#include#include#include#include#include#define ll long long
#define inf (1ll<<30)
#define mod 12345678
#define pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;
int xx[9]=;
int yy[9]=;
int f[30][1000],cnt[1000],fil[10][10],bin[30],ans,n,m;
pairt[10];
char s[10][10];
int dp()
} f[0][0]=1;
for (int i=1;i<=n*m;i++)
for (int j=0;jreturn f[n*m][bin[top]-1];
}void dfs(int x,int y,int c)
if (y==m) dfs(x+1,1,c);
else dfs(x,y+1,c);
int k;
for (k=0;k<9;k++) if (s[x+xx[k]][y+yy[k]]=='x') break;
if (k==9)
}int main()
dfs(1,1,0);
printf("%d\n",(ans+mod)%mod);
return 0;
}
bzoj2669 CQOI2012 區域性極小值
洛谷bzoj 這道題的方法是用dfs進行搜尋容斥時,dp統計答案 感覺痛苦的同學建議做做 乙個區域性最小值就可以覆蓋最少四個點 放在四個角上 最多九個 放在中間 所以最多隻會有8個區域性最小值,可以考慮一下狀壓 我們可以考慮從小到大地放入每個元素 dp i j 表示在選擇的區域性最小值狀態為j時,已...
bzoj 2669 區域性極小值
bzoj 2669 區域性極小值 有乙個n行m列的整數矩陣,其中1到nm之間的每個整數恰好出現一次。如果乙個格仔比所有相鄰格仔 相鄰是指有公共邊或公共頂點 都小,我們說這個格仔是區域性極小值。給出所有區域性極小值的位置,你的任務是判斷有多少個可能的矩陣。有乙個和dp求n的排列中有k個逆序對的方案數一...
BZOJ2669 區域性極小值
題目 有乙個n行m列的整數矩陣,其中1到nm之間的每個整數恰好出現一次。如果乙個格仔比所有相鄰格仔 相鄰是指有公共邊或公共頂點 都小,我們說這個格仔是區域性極小值。給出所有區域性極小值的位置,你的任務是判斷有多少個可能的矩陣。思路看到資料範圍馬上想到狀壓dp。先分析狀態數,會發現區域性極小值在一張圖...