1597 有限揹包計數問題

2021-09-30 13:56:15 字數 984 閱讀 3807

input

第一行乙個正整數n

1<=n<=10^5

output

乙個非負整數表示答案,你需要將答案對23333333取模

input示例

output示例

2 分類討論,

1 1 到根號n,字首和優化

2 根號n到n, 最多只能選根號n個, 於是有

ff[q][j] = ff[p][j - m - 1] + ff[q][j - i])

ff[i][j] 代表從根號n+1到n共選了i個,體積為j, 種類是多少

#include

#include

#include

#define mem(x) (memset(x,0,sizeof(x)))

using

namespace

std;

const

int len = 100000 + 5;

const

int mod = 23333333;

int f[2][len];

int ff[2][len];

int main(void)}}

int t = p,ans = f[t][n];

//cout << ans << endl;

p = 0, q = 1;

ff[0][0] = 1;

for (int i =1; i <= m; ++i,p^=1,q^=1)

for (int j = 0; j <= n; ++j)

ans = (ans + (long

long)f[t][j] * ff[q][n - j]) % mod;

//cout << ans << endl;

}cout

<< ans << endl;

return

0;}

1 答案一

2 答案二

3 答案三

51nod1597 有限揹包計數問題

你有乙個大小為n的揹包,你有n種物品,第i種物品的大小為i,且有i個,求裝滿這個揹包的方案數有多少 兩種方案不同當且僅當存在至少乙個數i滿足第i種物品使用的數量不同 n 100000,答案模23333333,時限2.333s 這道題一看是一道多重揹包,但是範圍有點大啊。可以嘗試利用一下題目的條件,對...

51nod1597 有限揹包計數問題

51nod1597 有限揹包計數問題 試題描述 你有乙個大小為n的揹包,你有n種物品,第i種物品的大小為i,且有i個,求裝滿這個揹包的方案數有多少 兩種方案不同當且僅當存在至少乙個數i滿足第i種物品使用的數量不同 輸入 第一行乙個正整數n 1 n 10 5 輸出 乙個非負整數表示答案,你需要將答案對...

51Nod 1597 有限揹包計數問題

首先這是乙個多重揹包 但是它的資料非常特殊,我們可以利用其性質優化演算法 乙個顯然的優化是 當 i sqrt n 時,可以取消個數限制 設 f i j 表示選了 i 個物品,體積為 j 的方案數 一共有兩種轉移 可以由 i 1 個物品加上乙個最小的物品 sqrt n 1 可以由 i 個物品全部加一 ...