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



  • 相关阅读:
    文件与流之动手动脑
    四则运算1.1版
    2018年11月16日编程体会
    JAVA(1)之关于对象数组作形参名的方法的使用
    re模块 时间模块
    日志模块
    软件开发目录规范
    模块和包
    内置函数
    匿名函数
  • 原文地址:https://www.cnblogs.com/bxd123/p/10856164.html
Copyright © 2011-2022 走看看