• 洛谷P1077[摆花]



    戳这里看原题


    明显的dp。。

    dp[i]表示摆i盆花的方案数。

    容易得到:dp[i]=(dp[i-1]+dp[i-2]+...+dp[i-a[j]])%mod

    边界条件:dp[0]=1.

    但是要注意在求和时判断数组下标的下限。


     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int mod = 1000007;
     4 int n, m, a[105], dp[105];
     5 int main() {
     6     scanf("%d%d", &n, &m);
     7     for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
     8     dp[0] = 1;  //边界条件
     9     for(int i = 1; i <= n; i++) //枚举每一种花
    10         for(int j = m; j >= 1; j--)  //枚举每一个摆花的结束点
    11             for(int k = 1; k <= a[i] && j - k >= 0; k++)  //枚举摆花的盆数
    12                 dp[j] = (dp[j - k] + dp[j]) % mod;  //求和
    13     printf("%d
    ", dp[m]); //输出
    14     return 0;
    15 }
    View Code
  • 相关阅读:
    docker命令总结
    VulToEs
    MYSQL
    MoonStack
    Spring mvc json null
    MySQL
    极光推送
    坑爹的RockSaw和坑爹的windows7
    App接口设计思路
    CSUOJ 1329 一行盒子(数组模拟链表)
  • 原文地址:https://www.cnblogs.com/aha--CYJ/p/8395099.html
Copyright © 2020-2023  润新知