• noip2012普及组 摆花


    描述

    小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号。为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。试编程计算,一共有多少种不同的摆花方案。


    一道其实挺水的dp

    但我愣是没看出来

    类似背包问题

    f[i][j]表示第i种花,一共已经选了j个的方案数

    状态转移方程f[i][j]=sum(f[i-1][j-k])(0<=k<=a[i])

    a[i]表示一种花最多选多少个

    注意k可以取到0(一个都不要)

    这种题到底怎么看出要dp呢

    我也不知道

    可能写多了就知道了吧

    还是得多刷题啊T^T

    #include<cstdio>
    const int N=105,mod=1000007;
    int a[N],f[N][N];
    int main()
    {
    	int n,m;
    	scanf("%d %d",&n,&m);
    	for(int i=1;i<=n;i++)	scanf("%d",&a[i]);
    	for(int i=1;i<=a[1];i++)	f[1][i]=1;
    	for(int i=1;i<=n;i++)	f[i][0]=1;
    	
    	for(int i=2;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		for(int k=0;k<=a[i]&&k<=j;k++)
    		f[i][j]+=f[i-1][j-k],f[i][j]%=mod;
    	}
    	printf("%d
    ",f[n][m]);
    	return 0;
    }


  • 相关阅读:
    Java杂项
    JFrog Artifactory
    TestNG+Selenium
    Linux杂项
    Java
    Spring Boot
    学习ThinkPHP第一天
    linux下文件解压
    php中require_once与include_once的区别
    ubuntu下的wps office for linux
  • 原文地址:https://www.cnblogs.com/Brian551/p/7353012.html
Copyright © 2020-2023  润新知