• luogu P1077 摆花


    题目描述

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

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

    输入输出格式

    输入格式:

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

    第二行有n个整数,每两个整数之间用一个空格隔开,依次表示a1、a2、……an。

    输出格式:

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

    输入输出样例

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

    说明

    【数据范围】

    对于20%数据,有0<n≤8,0<m≤8,0≤ai≤8;

    对于50%数据,有0<n≤20,0<m≤20,0≤ai≤20;

    对于100%数据,有0<n≤100,0<m≤100,0≤ai≤100。

    NOIP 2012 普及组 第三题

    放i种j盆.初始化为b[i][0]=1(0<=i<=m)。

    三重循环 k则是用于计算某种花放多少盆。

    从总盆数开始循环到总盆数-最大盆数,如果k小于0(说明最大盆数大于总盆数)就退出循环。

    状态转移方程则是:dp[i][j]+=dp[i-1][k]

    #include <cstdio>
    #include <iostream>
    
    const int mod = 1000007;
    int n,m;
    int a[106];
    int dp[106][106];
    int ans=0;
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;++i)
            scanf("%d",a+i);
        for(int i=0;i<=m;i++)dp[i][0]=1;
        
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                for(int k=j;k>=j-a[i];k--)
                {
                    if(k>=0)dp[i][j]+=dp[i-1][k],
                    dp[i][j]%=mod;        
                    else break;    
                }    
        printf("%d",dp[n][m]);
    }
  • 相关阅读:
    thinkphp3.2新部署是错
    淘宝code
    面试感悟----一名3年工作经验的程序员应该具备的技能---转载
    【海量之道】海量之道之SET模型
    看过年人流高峰,浅聊并发之战[架构篇]
    docker启动遇到的问题
    监听数据配置
    Python+requests+unittest+excel实现接口自动化测试框架
    冒泡排序及优化
    jmeter监控的一些插件
  • 原文地址:https://www.cnblogs.com/sssy/p/7094993.html
Copyright © 2020-2023  润新知