【洛谷习题】小A点菜
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                【洛谷习题】小A点菜
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                雖然也是一道dp的入門題,但就是想不到,或者說不會實現。dp還是要多做題。
鏈接:https://www.luogu.org/problemnew/show/P1164
?
我們可以設dp[i][j]表示以考慮完第i件,恰好消費j元的方案數。那么dp[i][j]=dp[i-1][j]+dp[i-1][j-a[i]],也就是討論第i件點不點。特別的,dp[0][0]=1。仔細想想發現其實可以像01背包那樣優化一維空間,我們定義dp[j]表示恰好花費j元時的方案數,那么dp[j]+=dp[j-a[i]]可以實現相同的效果。
1 #include <cstdio> 2 3 const int maxn = 105, maxm = 1e4 + 5; 4 5 int a[maxn], dp[maxm]; 6 7 int main() { 8 int n, m; 9 scanf("%d%d", &n, &m); 10 dp[0] = 1; 11 for (int i = 1; i <= n; ++i) { 12 scanf("%d", &a[i]); 13 for (int j = m; j >= a[i]; --j) 14 dp[j] += dp[j - a[i]]; 15 } 16 printf("%d", dp[m]); 17 return 0; 18 }AC代碼
?
轉載于:https://www.cnblogs.com/Mr94Kevin/p/9589409.html
總結
以上是生活随笔為你收集整理的【洛谷习题】小A点菜的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: [Manthan, Codefest 1
- 下一篇: 六导何时拍摄电影版的西游记啊?
