BZOJ 1079 SCOI2008 著色方案

2022-05-08 21:24:08 字數 1185 閱讀 9101

思路:如果把每種油漆看成一種狀態,o(5^15)不行

dp[a][b][c][d][e][f]:a表示能凃乙個的有多少個

b能凃2個的還有多少個

c能凃3個的還有多少個

d能凃4個的還有多少個

e能凃5個的還有多少個

last 上次凃的是:last個油漆。

所以這次如果選last-1個油漆的時候,數量還要減一,與上次不同

1

//#pragma comment(linker, "/stack:167772160")

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include

10 #include 11 #include 12 #include 13 #include 14

//#include

15using

namespace

std;

16#define clc(a,b) memset(a,b,sizeof(a))

17#define ll long long

18void fre()

19const

int inf = 0x3f3f3f3f;20

const

double eps = 1e-5;21

//const double pi = acos(-1);

22const ll mod = 1e9+7

;23 inline int

r()26

while(ch>='

0'&&ch<='9')

27return x*f;28}

29int a[16

];30 ll dp[16][16][16][16][16][6

];31

bool vis[16][16][16][16][16][6

];32

33 ll work(int a,int b,int c,int d,int e,int

last)

5253

intmain()

65ll ans;

66 ans=work(a[1],a[2],a[3],a[4],a[5],0

);67 cout69return0;

70 }

BZOJ 1079 SCOI2008 著色方案

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

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。輸...