奶牛們喜歡在黑暗的環境裡睡覺。當她們每晚回到牛棚準備睡覺時,牛棚裡有l(3<=l<=50)盞燈仍然亮著。所有燈的開關按編號公升序排成一列,最左邊的那個開關控制1號燈(所謂控制,也就是如果1號燈現在亮著,那麼按這個開關會使1號燈熄滅,否則這個操作會使1號燈被點亮)。由於奶牛們的蹄子過於粗大,沒法方便地按開關,她們總是用乙個特製的乾草叉來進行對開關的操作。這個叉子設計了t(1<=t<=7)個叉尖,相鄰叉尖的距離正好與相鄰開關的距離相等。但是現在有些叉尖被折斷了。比如說,t=4的乙個乾草叉,它的第3根叉尖被折斷了,我們就用'1101'來描述它。
如果把這個叉子的最左端對準那一列開關的最左端,按下,那1號、2號和4號燈的狀態會被改變(3號燈的狀態不變,因為那個叉尖被折斷了)。在進行這樣的操作的時候,任何乙個叉尖都必須有乙個對應的開關,也就是說,叉子的邊緣不能在那一列開關的範圍外,即使邊緣處的叉尖已經被折斷。
現在,你已經知道了各個燈的狀態,以及乾草叉現在的情況,請你找出乙個操作序列,使得在所有操作完成之後,仍然亮著的燈的數目最少。
第1行: 兩個用空格隔開的整數:l 和 t
第2行: 乙個長度為l的字串,串中不含空格且元素均為'0'或'1'。第i個元素是'1'則表示第i盞燈亮著,是'0'的話就表示第i盞燈已經被關掉
第3行: 乙個長度為t的字串,只含'0'或'1'(同樣不含空格)。如果第i個元素是'1',說明乾草叉的第i根叉尖仍完好無損,否則說明第i根叉尖已經被折斷
第1行: 輸出乙個正整數k,即為了達到目的一共需要用叉子按多少次開關
10 4
1111111111
1101
5
由於叉子最多7個齒,而燈不超過50盞,所以可以使用狀壓dp。
f[i][j][k]表示前i盞燈,j盞亮著,k為後t-1盞的二進位制狀態。
從i到i+1時,可以選著叉或不叉。
t=k*2+a[i+1];
p=t^z;
t=p%(1<<(l-1));
f[i+1][j-h[k]+h[p]][t]=min(f[i+1][j-h[k]+h[p]][t],f[i][j][k]+1);
t=k*2+a[i+1];
t=t%(1<<(l-1));
f[i+1][j+a[i+1]][t]=min(f[i+1][j+a[i+1]][t],f[i][j][k]);
h[i]表示i二進位制下1的個數
#include
#include
#include
#include
#include
using namespace std;
#define n 55
#define t 128
#define inf 0x7fffffff
int a[n],z=0;
int h[t];
int f[n][n][t];
int l,n,t,p;
int ans,s;
char c;
void pre()
}}void init()
scanf("\n");
for (int i=l;i>=1;--i)
}int main()
f[l-1][t][p]=0;
for (int i=0;i<=n;++i)
for (int j=0;j<=n;++j)
for (int k=0;k<=(1
<<(l-1))-1;++k)
if (f[i][j][k]!=inf/2)
s=n;
ans=inf/2;
for (int i=0;i<=n;++i)
for (int j=0;j<=(1
<<(l-1))-1;++j)
if (f[n][i][j]!=inf)
if (i<=s && f[n][i][j]s=i;
ans=f[n][i][j];
}else
if (i>s) break;
printf("%d\n",ans);
return
0;}
Input poj 1262 計算幾何
乙個地板被若干磚所覆蓋。現在請你判斷,這些磚是否恰好不重複,不遺漏的恰好覆蓋了整個地板。第一行為乙個整數n,表示有n組測試資料。每組測試資料第一行是兩個數l,w,表示地板的長和寬 不超過40000 第二行是乙個數t,表示有t塊磚 1 t 400 下面t行每行是四個數,xl,yl,xh,yh,其中 x...
XTU1262 優先佇列
使用優先佇列模擬一下就可以了,但是需要注意進行優化,題目有b 0的情況,也就是說無論如何撈魚都不會變,這種情況需要直接優化掉,不能進行模擬,否則會超時。include define ll long long define up i,l,h for int i l i define down i,h,...
hdu1262詳細題解
problem description 哥德 猜想大家都知道一點吧.我們現在不是想證明這個結論,而是想在程式語言內部能夠表示的數集中,任意取出乙個偶數,來尋找兩個素數,使得其和等於該偶數.做好了這件實事,就能說明這個猜想是成立的.由於可以有不同的素數對來表示同乙個偶數,所以專門要求所尋找的素數對是兩...