【問題背景】
zhx 和妹子們玩數數遊戲。
【問題描述】
僅包含 4 或 7 的數被稱為幸運數。
乙個序列的子串行被定義為從序列中刪去若干個數, 剩下的數組成的新序列。
兩個子串行被定義為不同的當且僅當其中的元素在原始序列中的下標的集合不
相等。對於乙個長度為 n的序列,共有 2^n個不同的子串行。(包含乙個空序列)。
乙個子串行被稱為不幸運的, 當且僅當其中不包含兩個相同的幸運數。
對於乙個給定序列, 求其中長度恰好為 k 的不幸運子串行的個數, 答案 mod
10^9+7 輸出。
【輸入格式】
第一行兩個正整數 n, k, 表示原始序列的長度和題目中的 k。
接下來一行 n 個整數 ai, 表示序列中第 i 個元素的值。
【輸出格式】
僅乙個數,表示不幸運子串行的個數。(mod 10^9+7)
【樣例輸入】
3 21 1 1
【樣例輸出】
3【樣例輸入】
4 24 7 4 7
【樣例輸出】
4 【樣例解釋】
對於樣例 1, 每個長度為 2 的子串行都是符合條件的。
對於樣例 2,4個不幸運子串行元素下標分別為:, , , 。
注意下標集對應的子串行不是「不幸運」的, 因為它包含兩個相同的幸運數
4.【資料規模與約定】
分析:好題啊!暴力做法很簡單,滿分做法需要具備一定的數學知識.
不幸運的數隨便怎麼選都行,關鍵是幸運的數要怎麼選.可以把幸運的數提出來,用陣列b儲存。要選總長度為k的子串行,我們可以在b中選k1個,在不幸的數中選k2個.b中的數因為每個數只能選乙個,所以可以先去重,並用乙個陣列cnt[i]記錄第i個幸運數有多少個.注意到b中的每類數要麼不選,要麼就有cnt[i]種選法,一共要選k1個,很像dp,究竟能否dp呢?理論上來說是可以的,但是如果幸運數很多的話狀態就表示不了.好在題目中說了ai<=10^9,大約有1000個幸運數,是完全可以dp的.
設f[i][j]表示前i類幸運數中組成長度為j的序列的方案數有多少種.b中的每類數要麼不選,要麼就有cnt[i]種選法,所以f[i][j] = f[i-1][j] + f[i-1][j-1] * cnt[i].k1的部分計算完了.
k2部分其實就是求若干個組合數.因為n特別大,不能用遞推來求出所有的組合數,只能在需要的時候求.涉及到除法取模,所以要求逆元,又因為有很多組合數要求,所以先預處理出1到n的階乘、逆元、逆元的階乘就好了,最後列舉k1,k1部分的答案與k2部分的答案乘一下就可以了.
注意:k1列舉的時候k2一定不能大於不幸運數的個數.
把不同類別的東西分開處理是這道題的關鍵點.有很多限制的計數子問題一般都用dp,限制不多的dp和數學方法都行.
#include #include#include
#include
#include
using
namespace
std;
typedef
long
long
ll;const
int mod = 1e9 + 7
;ll n, a[
100010], k, ans,m, jie[100010], niyuan[100010], nijie[100010], b[100010], cnt[100010], tot, tott, f[1024][1024
];void
init()
}bool
check(ll x)
return
true;}
void
print()
intmain()
f[0][0] = 1
;
for (int i = 1; i <= tott; i++)
//print();
m = n -tot;
//printf("flag! %lld\n", tott);
for (int i = tott; i >= 0; i--)
printf(
"%lld\n
", ans);
return0;
}
Tyvj 模擬賽 運
zhx和妹子們玩數數遊戲。僅包含4或7的數被稱為幸運數。乙個序列的子串行被定義為從序列中刪去若干個數,剩下的數組成的新序列。兩個子串行被定義為不同的當且僅當其中的元素在原始序列中的下標的集合不相等。對於乙個長度為n的序列,共有2n個不同的子串行。包含乙個空序列 乙個子串行被稱為不幸運的,當且僅當其中...
noip模擬賽 密碼
表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...
NOIP模擬賽 老師
題目描述 一座有n層的教學樓裡有一些學生,第i 0 i n 層有studentsi個學生。你被給定了乙個數k,如果第i層有x個學生,那麼這一層需要 x k 個老師。你可以調整每個學生的樓層,但是每個學生至多只能調整一層,就是說第i層的學生只能去第i 1層 如果有的話 第i層 第i 1層 如果i 1 ...