題解 AcWing279 自然數拆分

2022-07-02 11:36:10 字數 777 閱讀 7438

題面

因為題目中說參與加法運算的數可以重複,由此可以想到完全揹包計數問題。

完全揹包計數問題與 \(01\) 揹包計數問題只有乙個不同: \(01\) 揹包計數問題的第二維迴圈是倒敘迴圈,而完全揹包計數問題的第二維迴圈是正序迴圈。

這涉及到的是迴圈時後效性的問題,具體的證明留給讀者思考。

注意每一步計數都要取模,且最後輸出要減去只有 \(n\) 乙個數的一組解。

#include #define debug fprintf(stderr, "passing [%s] line %d\n", __function__, __line__)

#define itn int

#define gi gi

using namespace std;

typedef long long ll;

typedef pair pii;

typedef pair piii;

inline int gi()

while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return f * x;

}const int maxn = 4003;

int n;

ll dp[maxn];

int main()

} printf("%lld\n", (dp[n] - 1) % (1ll * 2147483648));

return 0;

}

AcWing 279 自然數拆分

原題鏈結 考察 完全揹包dp 思路 n可以看成體積為n,從1 n 1的數選的揹包.因為f i j 代表從前i個數選,體積恰好為j的方案數.感覺我 重新整理前後是一模一樣的,重新整理前是輸出錯誤答案,重新整理後又對了 1 include 2 include 3 include 4 using name...

分解自然數 題解

t1 題目描述 輸入自然數 n n 100 輸出所有和的形式。不能重複。如 4 1 1 2 4 1 2 1 4 2 1 1 屬於一種分解形式。樣例輸入 樣例輸出 1 7 1 6 2 7 1 1 5 3 7 1 1 1 4 4 7 1 1 1 1 3 5 7 1 1 1 1 1 2 6 7 1 1 1...

AcWing P279 自然數拆分(DP)

給定乙個自然數n,要求把n拆分成若干個正整數相加的形式,參與加法運算的數可以重複。注意 拆分方案不考慮順序 至少拆分成2個數的和。求拆分的方案數 mod 2147483648的結果。輸入格式 乙個自然數n。輸出格式 輸入乙個整數,表示結果。資料範圍和約定 1 n 4000 輸入樣例 7輸出樣例 14...