點擊打開鏈接
題意:有n個程序員,第i個程序員每行會有ai個bug,然后讓你按著順序安排程序員,問你有多少種安排方法,可以使得寫m行的bug最多b個
思路:
dp[i][j]表示寫i行bug數有j個的方法數
轉移方程和背包問題類似
最后掃一遍統計一下就好
代碼:
#include <bits/stdc++.h>using namespace std;const int maxn = 500+10;int a[maxn],dp[maxn][maxn];int main(){ int n,m,b,mod; cin >> n >> m >> b >> mod; for(int i=1; i<=n; i++) cin >> a[i]; dp[0][0] = 1; for(int k=1; k<=n; k++) for(int i=1; i<=m; i++) for(int j=a[k]; j<=b; j++) dp[i][j] = (dp[i][j] + dp[i-1][j-a[k]]) % mod; long long ans = 0; for(int i=0; i<=b; i++) ans = (ans+dp[m][i])%mod; cout << ans << endl;}
新聞熱點
疑難解答