1. 程式人生 > >P1077 擺花 AC於2018.11.4

P1077 擺花 AC於2018.11.4

原題

題目描述

小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共mm盆。通過調查顧客的喜好,小明列出了顧客最喜歡的nn種花,從11到nn標號。為了在門口展出更多種花,規定第ii種花不能超過a_iai​盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。

試程式設計計算,一共有多少種不同的擺花方案。

輸入輸出格式

輸入格式:

第一行包含兩個正整數nn和mm,中間用一個空格隔開。

第二行有nn個整數,每兩個整數之間用一個空格隔開,依次表示a_1,a_2,…,a_na1​,a2​,…,an​。

輸出格式:

一個整數,表示有多少種方案。注意:因為方案數可能很多,請輸出方案數對10000071000007取模的結果。

輸入輸出樣例

輸入樣例#1: 

2 4
3 2

輸出樣例#1: 

2

說明

【資料範圍】

對於20%資料,有0<n≤8,0<m≤8,0≤a_i≤80<n≤8,0<m≤8,0≤ai​≤8;

對於50%資料,有0<n≤20,0<m≤20,0≤a_i≤200<n≤20,0<m≤20,0≤ai​≤20;

對於100%資料,有0<n≤100,0<m≤100,0≤a_i≤1000<n≤100,0<m≤100,0≤ai​≤100。

NOIP 2012 普及組 第三題

//12ms
#include<cstdio> 
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<ctype.h>
#include<numeric>
using namespace std;
int n,m;
int a[1000001];
int f[500][500];
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	f[0][0]=1;
	for(int i=1;i<=n;i++)
	for(int j=0;j<=m;j++)
	for(int k=0;k<=a[i];k++)
	f[i][j]=(f[i-1][j-k]+f[i][j])%1000007;
	cout<<f[n][m]<<endl;
	return 0;
}