題意:有n(n<=50)個燈,初始狀態都是關閉,有m個開關,每個開關都控制若干個燈,按下乙個開關,他所控制的燈就會由閉到開,或是由開到閉。問在m個開關按下與否的2^m的情況中,求每種情況下亮燈數量的立方和。
解法:假設
一種情況是開燈數是x,
x=(x1+x2+x3...xn),
xi是第i個燈的開閉情況。 則
x^3=(x1+x2+x3...xn)*(x1+x2+x3...xn)*(x1+x2+x3...xn)。即求三個燈的三三組合xi*xj*xk,只有xi,xj,xk都為1時候,他們的乘積才是1.
dp[i][j][k][state]表示三個燈ijk狀態為state的方案數,state為0-7,狀壓表示每個燈的開閉。轉移就是列舉每個開關的開閉。然後就是轉移計算所有狀態了。
**:#include #include #include #include #include using namespace std;
const int max=51;
int rem[max][max];
const long long inf=1000000007;
int dp[max][max][max][8][2];
int n,m;
int main()
{ int t;
scanf("%d",&t);
int kk=1;
while(t--)
{int n,m;
scanf("%d%d",&n,&m);
memset(rem,0,sizeof rem);
for(int i=0; i
HDU 5117 簡單揹包dp
本題目的意思,就是有n個燈泡,和m個開關,每個開關控制著一些燈的明亮,求所有在2 m種選擇下,所有明著的燈三次方總和,定義xi 為第i盞燈的明亮情況0代表不明,1,代表名 x 3 x1 x2 x3 xn x1 x2 x3 xn x1 x2 x3 xn 所以可以分開求在三盞燈為i,j,k 時所有情況個...
hdu 5312 Sequence 數學推導
解法 這個題看上去是乙個貪心,但是這個貪心顯然是錯的.事實上這道題目很簡單,先判斷1個是否可以,然後判斷2個是否可以.之後找到最小的整數k k 2 使得 m k mod 6 0即可.證明如下 3n n 1 1 6 n n 1 2 1,注意到n n 1 2是三角形數,任意乙個自然數最多只需要3個三角形...
HDU2086 A1 數學推導
有如下方程 ai ai 1 ai 1 2 ci i 1,2,3,n 若給出a0,an 1,和 c1,c2,cn.請程式設計計算a1 輸入包括多個測試例項。對於每個例項,首先是乙個正整數n,n 3000 然後是2個數a0,an 1.接下來的n行每行有乙個數ci i 1,n 輸入以檔案結束符結束。對於每...