• 摆花


    题目描述

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

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

    输入输出格式

    输入格式:

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

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

    输出格式:

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

    输入输出样例

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

    说明

    【数据范围】

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

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

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

    NOIP 2012 普及组 第三题

    分析

    显然本题是一道DP,所以开始考虑状态转移方程,即:二维数组处理,表示放到第i种花已放了j盆花。

    也就是:f[i][j+k]+=f[i-1][k];

    CODE

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 using namespace std;
     7 const int mod=1000007;
     8 const int M=105;
     9 int n,m;
    10 int a[M];
    11 int f[M][M];
    12 inline int get(){
    13     char c=getchar();
    14     int res=0;
    15     while (c<'0'||c>'9') c=getchar();
    16     while (c>='0'&&c<='9'){
    17         res=(res<<3)+(res<<1)+c-'0';
    18         c=getchar();
    19     }
    20     return res;
    21 }
    22 int main() {
    23     n=get(),m=get();
    24     for (int i=1;i<=n;i++) a[i]=get();
    25     for (int i=0;i<=n;i++) f[i][0]=1;
    26     for (int i=1;i<=n;i++){
    27         for (int j=0;j<=a[i];j++){
    28             for(int k=0;k<=m-j;k++){
    29                 if(j==0&&k==0) continue;
    30                 f[i][j+k]+=f[i-1][k];
    31                 f[i][j+k]%=mod;
    32             }
    33         }
    34     }
    35     printf("%d",f[n][m]%mod);
    36     system("pause");
    37     return 0;
    38 }
  • 相关阅读:
    安装python包的两种方法
    Oracle 查询当前用户下的所有表
    Oracle SQL存储过程结构、异常处理示例
    Oracle IF-ELSE条件判断结构
    Oracle 组函数count()
    从svn下载项目后出现 Error:java: Compilation failed: internaljava compiler error 解决办法
    当学习失去方向,开始荒废时光时
    给自己一个目标
    汇编环境搭建在Linux下
    汇编学习总结
  • 原文地址:https://www.cnblogs.com/kanchuang/p/11116115.html
Copyright © 2020-2023  润新知