zoukankan      html  css  js  c++  java
  • P1077 摆花 dp

      

    题目描述

    小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共mm盆。通过调查顾客的喜好,小明列出了顾客最喜欢的nn种花,从11到nn标号。为了在门口展出更多种花,规定第ii种花不能超过a_iai盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。

    试编程计算,一共有多少种不同的摆花方案。

    输入输出格式

    输入格式:

    第一行包含两个正整数nn和mm,中间用一个空格隔开。

    第二行有nn个整数,每两个整数之间用一个空格隔开,依次表示a_1,a_2,…,a_na1,a2,,an

    输出格式:

    一个整数,表示有多少种方案。注意:因为方案数可能很多,请输出方案数对10000071000007取模的结果。

    输入输出样例

    输入样例#1: 复制
    2 4
    3 2
    
    输出样例#1: 复制
    2


    经典dp
    1:
    #include<bits/stdc++.h>
    using namespace std;
    //input by bxd
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);--i)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m)
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define ll long long
    #define pb push_back
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    #define inf 0x3f3f3f3f
    #define lson l,m,pos<<1
    #define rson m+1,r,pos<<1|1
    const int N=4000+5;
    const int mod=1000007;
    int dp[N][N];
    
    int main()
    {
        int n,m;RII(n,m);
    
        rep(i,0,n)
        dp[i][0]=1;
    
        rep(i,1,n)
        {
            int x;RI(x);
            rep(j,0,x)//枚举该种类花的数量
            rep(k,0,m-j)//继承前面花的数量
            if(j||k)//显然  不能同时为0  不然会重复
            dp[i][j+k]=(dp[i][j+k]+dp[i-1][k])%mod;
        }
    
        cout<<dp[n][m]%1000007;
    
        return 0;
    }
    View Code

    2:

    #include<bits/stdc++.h>
    using namespace std;
    //input by bxd
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);--i)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m)
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define ll long long
    #define pb push_back
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    #define inf 0x3f3f3f3f
    #define lson l,m,pos<<1
    #define rson m+1,r,pos<<1|1
    const int N=4000+5;
    const int mod=1000007;
    int dp[N][N];
    
    int main()
    {
        int n,m;RII(n,m);
    
        rep(i,0,n)
        dp[i][0]=1;
    
        rep(i,1,n)
        {
            int x;RI(x);
            rep(j,1,m)
            rep(k,0,x)
            if(j-k>=0)
            dp[i][j]=(dp[i][j]+dp[i-1][j-k] )%mod;
        }
    
        cout<<dp[n][m]%1000007;
    
        return 0;
    }
    View Code



  • 相关阅读:
    机器学习(深度学习)
    机器学习(六)
    机器学习一-三
    Leetcode 90. 子集 II dfs
    Leetcode 83. 删除排序链表中的重复元素 链表操作
    《算法竞赛进阶指南》 第二章 Acwing 139. 回文子串的最大长度
    LeetCode 80. 删除有序数组中的重复项 II 双指针
    LeetCode 86 分割链表
    《算法竞赛进阶指南》 第二章 Acwing 138. 兔子与兔子 哈希
    《算法竞赛进阶指南》 第二章 Acwing 137. 雪花雪花雪花 哈希
  • 原文地址:https://www.cnblogs.com/bxd123/p/10856164.html
Copyright © 2011-2022 走看看