当前位置: 首页 > news >正文

摆花(codevs 1315)

 

题目描述 Description

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

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

输入描述 Input Description

输入共2行。

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

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

输出描述 Output Description

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

样例输入 Sample Input

2 4

3 2

 

样例输出 Sample Output

2

 

数据范围及提示  Data Size & Hint

【输入输出样例说明】

有2种摆花的方案,分别是(1,1,1,2),(1,1,2,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。


通过这道题,我认为最大的收获是弄清了倒推的意义。之前一直都是看题解,瞬时记忆做法,但并没有真正掌握。现在,我估计初步有了独立思考DP问题的能力了

思路:

当前的状态是由上一步的方程直接推出,我们在推出当前状态时需要维护之前状态,因此采用倒推,利用之前的状态先改变后面的状态,逐步向前推去

如果后边还要推方程,那就为后面的结论做好了铺垫;如果已经到头了,那就已经求出答案啦

 

详见代码^-^

#include<stdio.h>
#define MX 1001
#define P 1000007
int a[MX],f[MX];

int main()
{
    int n,m;
    scanf("%d%d",&n,&m); //n=2,m=4
    for(int i=1;i<=n;++i) {
        scanf("%d",&a[i]);
    }
    f[0]=1;
    for(int i=1;i<=n;++i) //i 种花 
        for(int j=m;j>=1;j--)//摆 j 盆 
            for(int k=1;k<=j && k<=a[i];++k)//第 i 种花摆 k 盆  
                f[j]=(f[j]+f[j-k])%P;//更新结果摆 j 盆花的情况 
    printf("%d",f[m]);
    return 0;
}

 

转载于:https://www.cnblogs.com/qseer/p/9444473.html

相关文章:

  • java课设要分小组吗_Java团队课程设计-学生成绩管理
  • 惊群 java_(转)测试Lighttpd accept的惊群现象
  • Python——私有化 和 属性property
  • python again_收藏!最全从Python小白到大牛,要走的路这里都有(初级篇)
  • .Net Core缓存组件(MemoryCache)源码解析
  • php 函数变量 前加,php在函数和变量前面加上@和$符号的区别详解
  • 凸函数与简森不等式(Jensen's inequality)
  • php date参数n,总结PHP date()参数列表
  • 小程序自定义函数—数字千位转换
  • tp3.2.3php环境要求,TP3.2.3开发手册
  • 控件模板
  • php 热点,PHP+jQuery实现中国地图热点数据统计展示效果
  • phpspy.php,一款php后门 phpspy的情况
  • Appium 之处理首次启动手机App时的系统权限弹框
  • 体对角线 matlab,Matlab计算结果显示求不出精确解
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Apache Pulsar 2.1 重磅发布
  • JavaScript DOM 10 - 滚动
  • javascript面向对象之创建对象
  • PAT A1050
  • python大佬养成计划----difflib模块
  • Terraform入门 - 1. 安装Terraform
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 基于HAProxy的高性能缓存服务器nuster
  • 如何优雅地使用 Sublime Text
  • 使用API自动生成工具优化前端工作流
  • 一份游戏开发学习路线
  • 一文看透浏览器架构
  • 原生JS动态加载JS、CSS文件及代码脚本
  • Android开发者必备:推荐一款助力开发的开源APP
  • NLPIR智能语义技术让大数据挖掘更简单
  • 数据可视化之下发图实践
  • ​iOS安全加固方法及实现
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #if 1...#endif
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • *Django中的Ajax 纯js的书写样式1
  • *上位机的定义
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET建议使用的大小写命名原则
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .net专家(高海东的专栏)
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /bin、/sbin、/usr/bin、/usr/sbin
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @JsonSerialize注解的使用