條形碼問題

2022-05-07 21:24:14 字數 1848 閱讀 8725

前言

這題是前天,對,沒錯前天的模擬賽做到的。然而我今天才訂正完。

題面

條形碼是一種由亮條(light bar)和暗條(dark bar)交替出現且以暗條為起頭的符號,每條都占有若干個單位寬。圖33-1給出了乙個含有4個條的條形碼它延續了1+2+3+1=7單位的寬 。

一般情況下bc(n,k,m)是乙個包含所有由k個條總寬度正好為n個單位,每個條的寬度至多為m個單位性質的條形碼組成的集合。

例如:圖33-1的條形碼屬於bc(7,4,3)而不屬於bc(7,4,2)。

圖33-2顯示了集合bc(7,4,3)中的所有16個符號,其中1表示暗,0表示亮。

圖中所示條形碼已按字典順序排列冒號左邊數字為條形碼碼的編號,圖33-1的條形碼在bc(7,4,3)書的編為4。

輸入

輸入的第一行為n、k、m的值(1≤n,k,m≤33)。

第二行為數字s(0≤s≤100),而後的s行中,每行為乙個圖33-2那樣描述的集合bc(n,k,m)中的乙個條形碼。

輸出

你的程式應完成任務 

第一行是bc(n,k,m)中條形碼的個數 

第二行起的s行中,每一行是輸入檔案對應條形碼的編號;輸入與輸出資料中同一行相鄰兩個數之間用空格區分。

分析

§ 1 列舉?

理論上可行,但因為有每條寬上線m的限制,因此列舉時並不只是像生成全排列那樣簡單,需要注意的細節很多。

§ 2 換個思路

我們考慮一下類似於canter expansion的思路,就是說把當前要求的條形碼序列分解,然後求之前總的條形碼個數,也就是當前的編號。(如何詳細描述呢?我也不是很好表達,不明白的同學可以去看一下關於canter expansion的文章)

§ 3 動態規劃

沒錯,我們用dp來求那個「之前總的條形碼個數」。

設dp[i][j][k][x]表示由j個條總寬度正好為i個單位,首條的顏色為x,寬度為k個單位的條形碼的編號。

則有dp[i][j][k][x] = ∑dp[i - 1][j][k - 1][x] + ∑dp[i - 1][j - 1][l][!x]

其中1 ≤ l ≤ m, !x表示與x相反的顏色。

參考**

要點均注在注釋中

#include const

int maxn = 35

;int n, k, m, s, dp[maxn][maxn][maxn][2

];char

str[maxn];

void

init();

intmain()

if (str[j] == str[j - 1]) len++;

else cnt++, len = 1

; }

printf(

"%d\n

", ans);

}return0;

}void

init()

}

總結這題的滿分思路比較難考慮到,說實話暴力都很難寫,我也是看了dalao的ac**才明白的。

重點呢在於你把編號轉換成方案數,再匯出這個轉移方程的過程。

當然這篇部落格不得不說我寫得有些含糊,當然我自己明白,可是我是真的表達不出來。

識別條形碼

問題描述 計算機學院2013級的院草語文難同學是軟院院花牟黑黑愛慕的物件,因此牟黑黑經常約楠神去逛街,楠神不喜歡陪牟黑黑逛街,但是不得不從啊。所以在牟黑黑逛街的時候他就無聊的用眼睛識別條形碼 在生活中,條形碼經常用來標誌物品的資訊。條形碼是由黑白相間的條組成的。條的寬度有兩種,我們可以認為窄的代表0...

生成條形碼

一 路由 routes.maproute name home url home getbar defaults new 二 html頁 text value id codenum button value 生成條形碼 onclick wds createbar width 200px height ...

條形碼生成

生成條形碼的類 public class barcode128dll set private font m valuefont new font 宋體 10 是否顯示可見號碼 如果為null不顯示號碼 public font valuefont set private byte m magnify ...