早教吧作业答案频道 -->其他-->
摆花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动态规...的网友还看了以下:
已知文法G2=(VT={a,',',(,)},VN={S,L),S,P),其中P为, S→(L)|a 2020-05-26 …
已知文法G2=(VT={a,',',(,)},VN{S,L},S,P),其中P为, S→(L)|a 2020-05-26 …
己知文法G2=(VT={a,',',(,)},VN={S,L},S,P),其中P为, S→(L)|a 2020-05-26 …
英语翻译麻烦翻译的稍微有文采一些再翻译一个s-L'toile和Tadedeveranoenlapl 2020-06-04 …
给定文法G=({S,L},{a,(,)},{S→(L)|aL→L,S|S},S).给出句型“(S, 2020-07-08 …
编译原理题目s→(L)|aS|aL→L,S|S消除左递归和回溯(过程请详细点)题目重新发下s→(L) 2020-11-23 …
阅读材料:求l+2+22+23+24+…+22013的值.设S=l+2+22+23+24+…+220 2020-12-05 …
基础练习―、用“V”给加点字选择正确的读音。蜡烛(lànà)搜查(sōushōu)一截(jiējié 2020-12-21 …
根据课文:基础练习―、用“V”给加点字选择正确的读音。蜡烛(lànà)搜查(sōushōu)一截(j 2020-12-21 …
英文单词分类填空动物类1.O()t()p()s2.k()t()e()3.l()b()t()r4.a( 2021-02-05 …