题目名称 | 1270. [NOIP 2012]摆花 |
---|---|
输入输出 | flower.in/out |
难度等级 | ★☆ |
时间限制 | 1000 ms (1 s) |
内存限制 | 128 MiB |
测试数据 | 10 |
题目来源 | yuan 于2012-11-12加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:236, 提交:535, 通过率:44.11% | ||||
sd | 100 | 0.000 s | 0.00 MiB | C++ |
XDDD | 100 | 0.000 s | 0.00 MiB | C++ |
Shirry | 100 | 0.000 s | 0.00 MiB | C++ |
Youngsc | 100 | 0.000 s | 0.00 MiB | C++ |
Nancy | 100 | 0.000 s | 0.00 MiB | C++ |
lihaoze | 100 | 0.000 s | 0.00 MiB | C++ |
lihaoze | 100 | 0.000 s | 0.00 MiB | C++ |
dew52 | 100 | 0.000 s | 0.00 MiB | C++ |
dew52 | 100 | 0.000 s | 0.00 MiB | C++ |
陈启航 | 100 | 0.000 s | 0.00 MiB | C++ |
本题关联比赛 | |||
20121121 | |||
防止颓废的小练习v0.1 | |||
防止isaac的小练习day2 |
关于 摆花 的近10条评论(全部评论) | ||||
---|---|---|---|---|
| ||||
#include <iostream>
#include <cstdio> #include <cstring> #include <cmath> #include <climits> #include <algorithm> using namespace std; const int maxn=100+1; const int mm=1000007; int a[maxn]; int f[maxn][maxn]; int n,m; int main() { scanf("%d%d",&n,&m); for (int i=1; i<=n; i++) scanf("%d",&a[i]); for (int i=0; i<=n; i++) f[0][i]=1; for (int i=1; i<=m; i++) for (int j=1; j<=n; j++) for (int k=0; k<=min(i,a[j]); k++) { f[i][j]=(f[i][j]+f[i-k][j-1])%mm; } printf("%d\n",f[m][n]); return 0; } | ||||
学习记忆化搜索
| ||||
0.0
| ||||
回复 @MC万岁 :
AC\(^_^)/~~ | ||||
论1和i的区别
论1000000007和1000007的区别
Sky_miner
2016-10-07 19:19
4楼
| ||||
初值又设置错了。。。。
再见
2016-05-04 12:56
3楼
| ||||
加滚动会不会快一点…
| ||||
|
小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号。为了在门口展出更多种花,规定第i 种花不能超过ai 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。
试编程计算,一共有多少种不同的摆花方案。
输入共2行。
第一行包含两个正整数n和m,中间用一个空格隔开。
第二行有n个整数,每两个整数之间用一个空格隔开,依次表示a1、a2、……an。
输出只有一行,一个整数,表示有多少种方案。注意:因为方案数可能很多,请输出方案数对1000007取模的结果。
2 4 3 2
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。