NOIP2012普及组 摆花(重庆一中高2018级信息学竞赛测验6) 解题报告
2016-08-01 11:32
435 查看
做题思路(正解):根据题意,要求不同摆花的方案数,自然想到递推算法。设f(i,j)表示前i种花摆放j盆的不同方案数,当摆第i种花时,可以不摆,可以只摆1盆,最多可以摆a[i]盆(如果a[i]>j,则最多可摆j盆),并且第i种花一定是摆在最后面的,所以f(i,j)=f(i-1,j)+f(i-1,j-1)+f(i-1,j-2)+...f(i-1,max(j-a[i],0)),最后的答案即为f(N,M)。分析边界条件:如果摆花的盆数为0(不摆花),则无论摆多少种花,都只有一种方案,即f(i,0)(0<=i<=N)=1;如果只有一种花又要摆花,则只要摆花盆数不超过a[1],方案数都为1,即f(1,j)(1<=j<=min(M,a[1]))=1,因为在计算前要将记录答案的数组清零,所以不用专门赋值。时间复杂度为O(N*M*M)。
#include<cstdio> #include<cstdlib> #include<iostream> #include<algorithm> #include<cstring> using namespace std; const int maxn=105; const int mo=1000007; int N,M; int a[maxn]; int d[maxn][maxn]; //d[i][j]表示前i种花摆j盆的方案数 void solve() //d[i][j]=d[i-1][j]+d[i-1][j-1]+...+d[i-1][j-a[i]](j-a[i]>=0) { memset(d,0,sizeof(d)); for(int i=0;i<=N;i++) //边界条件 d[i][0]=1; for(int j=0;j<=min(M,a[1]);j++) d[1][j]=1; for(int i=2;i<=N;i++) for(int j=1;j<=M;j++) { d[i][j]=d[i-1][j]; for(int k=1;k<=a[i];k++)if(j-k>=0) d[i][j]=(d[i][j]+d[i-1][j-k])%mo; } printf("%d\n",d [M]); } int main() { freopen("flower.in","r",stdin); freopen("flower.out","w",stdout); scanf("%d%d",&N,&M); for(int i=1;i<=N;i++) scanf("%d",&a[i]); solve(); return 0; }
考后反思:递推算法的题最重要的就是设出正确的状态函数,并准确推出递推方程。只有多思考,多练习这类型的题,才能在考试时正确推出递推方程。
相关文章推荐
- NOIP2011普及组 瑞士轮(重庆一中高2018级信息学竞赛测验4) 解题报告
- NOIP2008普及组 排座椅(重庆一中高2018级信息学竞赛测验5) 解题报告
- NOIP2010普及组 导弹拦截(重庆一中高2018级信息学竞赛测验3) 解题报告
- NOIP2013提高组 火柴排队(重庆一中高2018级信息学竞赛测验6) 解题报告
- NOIP2011提高组 聪明的质检员(重庆一中高2018级信息学竞赛测验6) 解题报告
- Codevs 3287 NOIP2013提高组 货车运输(重庆一中高2018级信息学竞赛测验2) 解题报告
- RQNOJ190 拦截匪徒 (重庆一中高2018级信息学竞赛测验2) 解题报告
- vijos1037 搭建双塔(重庆一中高2018级信息学竞赛测验7) 解题报告
- OpenJudge2704 寻找平面上的极大点(重庆一中高2018级信息学竞赛测验9) 解题报告
- Codevs4175 收费站(重庆一中高2018级信息学竞赛测验9) 解题报告
- UVA815 洪水(重庆一中高2018级信息学竞赛测验3) 解题报告
- UVA1615 高速公路(highway)(重庆一中高2018级信息学竞赛测验5) 解题报告
- USACO2.4.2 穿越栅栏(简单版本) (重庆一中高2018级信息学竞赛测验2) 解题报告
- POJ3069 萨鲁曼的大军(重庆一中高2018级信息学竞赛测验3) 解题报告
- NOIP 2012 - 普及组 摆花 递推 重庆一中高2018级竞赛班第六次测试 2016.7.31 Problem 3
- 练习题GRYZ2015 足球联赛(重庆一中高2018级信息学竞赛测验4) 解题报告
- 练习题 旅行(重庆一中高2018级信息学竞赛测验4) 解题报告
- JSOI2010 Codevs5227 盛夏的果实(重庆一中高2018级信息学竞赛测验7) 解题报告
- 【动态规划练习题】 学生宿舍(重庆一中高2018级信息学竞赛测验10) 解题报告
- USACO 月赛 劣质的草 (重庆一中高2018级信息学竞赛测验2) 解题报告