BZOJ 1079 SCOI2008 著色方案

2021-06-25 08:46:35 字數 1142 閱讀 8633

題目:

分析:一看就覺得是dp或者直接排列組合公式或者容斥?。。。。我就只想到dp的,我們用dp[i][j]表示前i種顏色,排列出有j對相鄰一樣顏色的方案數。當出現乙個新的顏色時,我們把這個顏色插板法插進去,我們要列舉插入的方式,可能插到相鄰顏色一樣的中間,或者不是,然後進行狀態轉移........具體看**。

**:

#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

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

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

#define clr(a,x) memset(a,(x),sizeof(a))

#define eps 1e-8

#define ll long long

#define mp make_pair

const int maxn=5*15+5;

const int mod=1e9+7;

ll a[maxn],reva[maxn];

ll dp[maxn][maxn];

inline ll aa(int n,int m)

ll qpow(ll base,ll p)

return ret;

}vectorv;

int slot;

int cnt[2][10];

void dosum(ll d,int same,int bit,ll & t)

t = (t+d*c%mod)%mod;

char zzz='l';

}setvis;

void dosomething(int cur)

{ int sz=v.size();

int s=0; rep(i,0,sz) s += v[i]-1;

vis.clear();

rep(i,0,(1<

BZOJ1079 SCOI2008著色方案 DP

只能想到 5 15 的方法。我們要利用起 ci比較小這個性質,f a b c d e last 表示有a 種顏色用了1個,b種顏色用了2個 上一次染色用的是剩餘 last 個的顏色,轉移就是f a,b,c,d,e,last a last 2 f a 1,b,c,d,e b last 3 f a 1,...

bzoj1079 SCOI2008 著色方案

有n個木塊排成一行,從左到右依次編號為1 n。你有k種顏色的油漆,其中第i種顏色的油漆足夠塗ci個木塊。所有油漆剛好足夠塗滿所有木塊,即c1 c2 ck n。相鄰兩個木塊塗相同色顯得很難看,所以你希望統計任意兩個相鄰木塊顏色不同的著色方案。第一行為乙個正整數k,第二行包含k個整數c1,c2,ck。輸...

bzoj 1079 SCOI2008 著色方案

有n個木塊排成一行,從左到右依次編號為1 n。你有k種顏色的油漆,其中第i種顏色的油漆足夠塗ci個木塊。所有油漆剛好足夠塗滿所有木塊,即c1 c2 ck n。相鄰兩個木塊塗相同色顯得很難看,所以你希望統計任意兩個相鄰木塊顏色不同的著色方案。第一行為乙個正整數k,第二行包含k個整數c1,c2,ck。輸...