2012_p3 摆花 (flower.cpp/c/pas)

时间限制: 1 Sec  内存限制: 128 MB
提交: 17  解决: 10
[提交][状态][讨论版][命题人:外部导入]

题目描述

3.摆花

(flower.cpp/c/pas)

【问题描述】

小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆。通过调

查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号。为了在门口展出更多种花,

规定第 i 种花不能超过 ai盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。

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

【输入】

输入文件 flower.in,共 2 行。

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

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

【输出】

输出文件名为 flower.out。

输出只有一行,一个整数,表示有多少种方案。注意:因为方案数可能很多,请输出

方案数对 1000007 取模的结果。

【输入输出样例 1】

flower.in

2 4

3 2

flower.out

2

【输入输出样例说明】

有 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。

输入

 

输出

 

提示

解析:

f[n][m] 取到第i种花时,还有m盆要取。 f[n][m] = f[n][m] + f[n-1][m-k]      0<=k <= a[i]

m == 0, 说明取完,返回结果 为 1.

m != 0 && i == 0    则说明没有取完,因此该方案结果数为0.

先想到的就是暴搜。。。。但是程序一编出来测一下100 100 100顿时就呵呵呵,
所以果断的换方法,对于题目,用一种抽象思维去理解它,把n种花看作n种物品,m盆看做总费用不超过m,
每种物品可取a[i]件,是不是有点像多重背包?
那么再想想,这道题100的数据如果用动态规划的三重循环貌似刚好够?那么就这个了,
只是f[n][m]所表示的含义应为前n件物品摆m盆的方案数,前两重循环不变,
只是最后的循环应该改为累加,累加前n-1件物品摆1盆,2盆,3盆。。。的方案数,最后答案即为f[n][m]
	初始化就是f[0][0]=1;
#include<cstdio>
int n,m,a[],f[][];
void dp()
{
f[][]=;
for(int i=;i<=n;i++)
for(int j=m;j>=;j--)
for(int k=;k<=a[i]&&k<=j;k++)
f[i][j]=(f[i][j]+f[i-][j-k])%;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
dp();
printf("%d",f[n][m]);
}
#include<iostream>
using namespace std;
int num[];
int n,m;
int f[][];
int dfs(int i,int m) // 当前摆到第i种,还剩m盆要摆。
{
if(f[i][m] > ) return f[i][m];
if(m == ) return ;
if(i == && m != ) return ;
for(int k = ; k <= num[i]; k++) // 第i种可以摆k盆
if(m >= k)
f[i][m] = (f[i][m] + dfs(i-,m-k))%;
return f[i][m];
} int main()
{
cin >> n >> m;
for(int i = n; i >= ; i--)
cin >> num[i];
cout<<dfs(n,m);
return ;
}

摆花 (DP动态规划)的更多相关文章

  1. Day 5 笔记 dp动态规划

    Day 5 笔记 dp动态规划 一.动态规划的基本思路 就是用一些子状态来算出全局状态. 特点: 无后效性--狗熊掰棒子,所以滚动什么的最好了 可以分解性--每个大的状态可以分解成较小的步骤完成 dp ...

  2. (转)dp动态规划分类详解

    dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...

  3. 【模板整合计划】DP动态规划

    [模板整合计划]DP动态规划 一:[背包] 1.[01背包] 采药 \([P1048]\) #include<algorithm> #include<cstdio> int T ...

  4. DP动态规划学习笔记——高级篇上

    说了要肝的怎么能咕咕咕呢? 不了解DP或者想从基础开始学习DP的请移步上一篇博客:DP动态规划学习笔记 这一篇博客我们将分为上中下三篇(这样就不用咕咕咕了...),上篇是较难一些树形DP,中篇则是数位 ...

  5. 树形DP——动态规划与数据结构的结合,在树上做DP

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法与数据结构的第15篇,也是动态规划系列的第4篇. 之前的几篇文章当中一直在聊背包问题,不知道大家有没有觉得有些腻味了.虽然经典的文 ...

  6. [原]POJ1141 Brackets Sequence (dp动态规划,递归)

    本文出自:http://blog.csdn.net/svitter 原题:http://poj.org/problem?id=1141 题意:输出添加括号最少,并且使其匹配的串. 题解: dp [ i ...

  7. Vijos_1792_摆花_(动态规划,多重集组合数)

    描述 https://vijos.org/p/1792 共n种花,第i种花有a[i]个,要摆m个,同一种花连续且花按照序号从小到大排,问共有多少种摆花方案.   描述 小明的花店新开张,为了吸引顾客, ...

  8. DP动态规划练习

    先来看一下经典的背包问题吧 http://www.cnblogs.com/Kalix/p/7617856.html  01背包问题 https://www.cnblogs.com/Kalix/p/76 ...

  9. 5. Longest Palindromic Substring(最长回文子串 manacher 算法/ DP动态规划)

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

随机推荐

  1. shell awk命令

    语法: awk '{command}' filename  多个命令以分号分隔. awk 'BEGIN {command1} {command2} END{command3}'  注意:BEGIN , ...

  2. ubuntu16.04 安装OpenNI并运行kinnectfusion

    由于OpenNI是ubuntu12.04以前使用的驱动kinnect的库,现在用起来有很多的不便,用心的系统运行旧的设备,有诸多问题.现总结流程如下: 环境:Ubuntu16.04 64bit Kin ...

  3. spring3: 切面及通知实例 Aspectj的aop

    1.前置通知 接口: package chapter1.server; public interface IHelloService { public void sayAdvisorBefore(St ...

  4. Referenced file contains errors (http://www.springframework.org/schema/aop/spring-aop-3.0.xsd). For more information, right click on the message in th

    XML code<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC &q ...

  5. C++(十七) — 宏代码、内联函数

     1.C++ 表达式返回值 返回引用:当函数返回引用类型时,没有复制返回值.相反,返回的是对象本身.(与之对应的C语言中,返回的是变量的值) C++中,表达式返回的是变量本身(也就是变量对应的地址). ...

  6. 牛客比赛-假的字符串-Trie+拓扑

    链接:https://www.nowcoder.com/acm/contest/59/B来源:牛客网 题目描述 给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个 ...

  7. 基于mysql的全文索引

    支持引擎:mysql的MyISAM存储引擎和Innodb存储引擎(5.6及其以上)支持. 适用类型:char.varchar和text. 新建方法:ALTER TABLE article  ADD F ...

  8. Flask安装配置

    倒腾了一下午了,还是不太顺利,顺便记录一下. 硬件环境:win8.1 64位 + python2.7.9 32位 安装easy_install 需要先下载ez_setup.py(需要复制该链接中的内容 ...

  9. C#-foreach与yield

    (转自:http://www.jb51.net/article/34627.htm) 1. foreach语句 C#编译器会把foreach语句转换为IEnumerable接口的方法和属性. fore ...

  10. ARM的37个寄存器

    31个通用寄存器,包括程序计数器(PC)在内.这些寄存器都是32位寄存器. 6个状态寄存器.这些寄存器都是32位寄存器. 通用寄存器(R0-R15)可分为三类 :不分组寄存器R0~R7: 分组寄存器R ...