早教吧作业答案频道 -->其他-->
摆花freepascal动态规划题目描述小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号。为
题目详情
摆花 free pascal 动态规划
题目描述
小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号。为了在门口展出更多种花,规定第 i 种花不能超过 ai 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。
试编程计算,一共有多少种不同的摆花方案。
输入
第一行包含两个正整数 n 和 m,中间用一个空格隔开。
第二行有 n 个整数,每两个整数之间用一个空格隔开,依次表示 a1、a2、……an。
输出
输出只有一行,一个整数,表示有多少种方案。注意:因为方案数可能很多,请输出方案数对 1000007 取模的结果。
样例输入
2 4
3 2
样例输出
2
提示
【输入输出样例说明】
有 2 种摆花的方案,分别是(1,1,1,2), (1,1,2,2)。括号里的 1 和 2 表示两种花,
比如第一个方案是前三个位置摆第一种花,第四个位置摆第二种花。
program p1104;
var n,m,i,j,k,l:integer;
ans:longint;
a:array[1..100] of integer;
f:array[0..100,0..100] of longint;
begin
readln(n,m);
ans:=-maxlongint;
for i:=1 to n do
read(a[i]);
for i:=1 to n do
f[i,0]:=1;
for j:=1 to m do
f[0,j]:=0;
for i:=1 to n do
for j:=1 to m do
begin
if j l:=j
else l:=a[i];
for k:=0 to l do
f[i,j]:=(f[i,j]+f[i-1,j-k]) mod 1000007;
end;
for i:=1 to n do
for j:=1 to m do
if f[i,j]>ans then ans:=f[i,j];
writeln(ans);
end.
各位大侠,哪里错了。。。速度回答
题目描述
小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号。为了在门口展出更多种花,规定第 i 种花不能超过 ai 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。
试编程计算,一共有多少种不同的摆花方案。
输入
第一行包含两个正整数 n 和 m,中间用一个空格隔开。
第二行有 n 个整数,每两个整数之间用一个空格隔开,依次表示 a1、a2、……an。
输出
输出只有一行,一个整数,表示有多少种方案。注意:因为方案数可能很多,请输出方案数对 1000007 取模的结果。
样例输入
2 4
3 2
样例输出
2
提示
【输入输出样例说明】
有 2 种摆花的方案,分别是(1,1,1,2), (1,1,2,2)。括号里的 1 和 2 表示两种花,
比如第一个方案是前三个位置摆第一种花,第四个位置摆第二种花。
program p1104;
var n,m,i,j,k,l:integer;
ans:longint;
a:array[1..100] of integer;
f:array[0..100,0..100] of longint;
begin
readln(n,m);
ans:=-maxlongint;
for i:=1 to n do
read(a[i]);
for i:=1 to n do
f[i,0]:=1;
for j:=1 to m do
f[0,j]:=0;
for i:=1 to n do
for j:=1 to m do
begin
if j l:=j
else l:=a[i];
for k:=0 to l do
f[i,j]:=(f[i,j]+f[i-1,j-k]) mod 1000007;
end;
for i:=1 to n do
for j:=1 to m do
if f[i,j]>ans then ans:=f[i,j];
writeln(ans);
end.
各位大侠,哪里错了。。。速度回答
▼优质解答
答案和解析
我觉得lz的方法有点麻烦。
var
f:array[0..100,0..100]of longint; //f[i,j]表示前i种花摆了j盆的方法数
a:array[0..100]of longint;
n,m,i,j,k:longint;
begin
readln(n,m);
for i:=1 to n do
begin
read(a[i]);
if a[i]>m then a[i]:=m; //如果花的个数多余m,把它当成m来算,多了也没用。
end;
for i:=0 to a[1] do
f[1,i]:=1; //初值。因为同一种花,不论放多少盆都只有一种方法。
for i:=2 to n do
begin
for j:=0 to m do
begin
for k:=a[i] downto 0 do
if(j>=k)then f[i,j]:=(f[i,j]+f[i-1,j-k])mod 1000007; //状态转移方程
end;
end;
writeln(f[n,m] mod 1000007);
end.
var
f:array[0..100,0..100]of longint; //f[i,j]表示前i种花摆了j盆的方法数
a:array[0..100]of longint;
n,m,i,j,k:longint;
begin
readln(n,m);
for i:=1 to n do
begin
read(a[i]);
if a[i]>m then a[i]:=m; //如果花的个数多余m,把它当成m来算,多了也没用。
end;
for i:=0 to a[1] do
f[1,i]:=1; //初值。因为同一种花,不论放多少盆都只有一种方法。
for i:=2 to n do
begin
for j:=0 to m do
begin
for k:=a[i] downto 0 do
if(j>=k)then f[i,j]:=(f[i,j]+f[i-1,j-k])mod 1000007; //状态转移方程
end;
end;
writeln(f[n,m] mod 1000007);
end.
看了摆花freepascal动态规...的网友还看了以下:
鼎湖山听泉文章一开头为什么要写肇庆? 2020-05-16 …
手帕浸酒精,燃烧不损坏实验在酒精手帕的实验中(手帕无损),因为其中水汽化吸热使温度达不到手帕燃点. 2020-05-21 …
在百合花中新媳妇一开始为什么不肯借被子最后又怎么舍得给小通讯员铺上1楼就个2B 2020-06-22 …
两个红辣椒阅读答案哨兵手心里攥着辣椒,为什么感动得说不出话来?老乡们一开门,为什么都愣住了?说说这 2020-06-27 …
编号为1、2、3、4、…、2007的2007只彩灯均亮着,每只灯各有一个开关控制.若第一次按一下所 2020-07-22 …
阅读全文,一起探讨下面的问题:(1)题目是“我很重要”,可一开始为什么用排比句式连续地说“我不重要” 2020-11-07 …
某一牌号为晋AS7965的汽车,车牌所属的省区及省会分别是()A.河南省,郑州B.陕西省,西安C.山 2020-11-11 …
狼和羊的故事:“一开始为了保护羊,把狼全部射杀,后来羊病了,专家说请两只狼回来."的完整版!真的很抱 2020-11-13 …
彩票公司每天开奖一次,从1、2、3、4四个号码中随机开出一个作为中奖号码,开奖时如果开出的号码与前一 2020-12-03 …
已知:上期双色球开奖号码为1、2、3、4、5、6、,本期号码一定开出上期号码一个号,计算概率?已知: 2021-01-09 …