題意:
輸入正整數n和k(1<=n<=400,1<=k<=10),求長度為n的01串中有多少個不含長度至少為k的回文連續子串。例如,n=k=3時只有4個串滿足條件:001,011,100,110。
分析:做這題的時候走了很多彎路,自以為想到了乙個不用表示狀態的dp,然而在保證不回文的時候就發現了很多問題。其實本題k的規模很小,所以應該要想到狀壓的。乙個串中只要保證不含長度為k也不含長度為k+1的回文串,那麼就不會出現大於k的回文串,所以我們構造的時候只要保證前面兩個條件符合即可。
狀壓記錄後k的字串,填新字元時保證不會構造出長度為k或k+1的回文串即可。
**如下:
1 #include2 #include3 #include4 #include5 #include6uva1633using
namespace
std;
7#define maxn 410
8#define maxd 3010
9#define mod 1000000007
1011
intf[maxn][maxd];
1213
bool check(int x,int
kl)14
22return1;
23}2425
intmain()
2634 memset(f,0,sizeof
(f));
35 f[0][0]=1;36
int ans=0;37
for(int i=1;i<=n;i++)
3847
if(i>=k&&check(j&((1
<2)-1),k-2
))48
52int now=(j&((1
<1))*2;53
if(p0) f[i][now]=(f[i][now]+f[i-1][j])%mod;
54 now=((j&((1
<1))*2)+1;55
if(p1) f[i][now]=(f[i][now]+f[i-1][j])%mod;56}
57}58for(int i=0;i<=(1
<1)-1;i++)
59 ans=(ans+f[n][i])%mod;
60 printf("
%d\n
",ans);61}
62return0;
63 }
這題沒有特判k=1的情況導致wa了很久,可能是我的**風格太渣的問題tat。
2016-03-04 13:25:02
1633 核桃的數量
1633 核桃的數量 description 歷屆試題 核桃的數量 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小張是軟體專案經理,他帶領3個開發組。工期緊,今天都在加班呢。為了鼓舞士氣,小張打算給每個組發一袋核桃 據傳言能補腦 他的要求是 1 各組的核桃數量必須相同。2 各組內必須能...
android EditText禁止輸入的幾種做法
1 把edittext的enable屬性設定成false 2 禁止edittext獲取焦點,如 minputview.setfocusable false minputview.setfocusableintouchmode false 解除限制 minputview.setfocusable tr...
禁止滑動的ViewPager
viewpager非常好用,但有時候需要在viewpager的裡面再嵌入viewpager,那麼就有衝突了,簡單粗暴的方法就是直接把乙個viewpager禁止滑動。注意 禁止滑動的同時不能禁止 setcurrentitem 方法。實現思路 重寫viewpager,覆蓋 ontouchevent 和 ...