9514 西園(貪心演算法)

2022-05-03 22:06:11 字數 1672 閱讀 1345

該題有題解

時間限制:1000ms  記憶體限制:65535k

提交次數:192 通過次數:48

題型: 程式設計題   語言: g++;gcc

華農人多已經不是一天兩天的事了,這導致學生吃飯要排很久的隊。

現在,傳說中的spring brother為了讓華農學生有個舒服的就餐環境,斥巨資改建華山西園飯堂。

改建後的西園飯堂單單視窗,廚師的數量和級別就有乙個巨大的飛躍,學生們吃飯再也不需要排隊啦。

由於廚師數目很多,為了便於管理。每個廚師會被分發乙個正整數編號(所有編號都有且僅有乙個廚師擁有)。

編號的數值越小,代表廚師的廚藝越好,當然,學生們也就越喜歡吃他煮的飯菜。

然而,廚師們十分懶惰,他們每次只願意提供乙份飯菜,所以,廚師們就要一一對應地提供飯菜給學生們。

現在,有n個學生需要到飯堂就餐。

學生們對飯菜有一定的要求,他們心中都有乙個標準的廚師編號,只有編號小於等於標準編號的廚師,他們才願意選擇這些廚師提供的飯菜。

現在告訴你,每個學生心中標準的廚師編號。

聰明的10級同學,請幫我計算下,總共有多少種分配的方式,使得所有學生都能選擇到適合自己的廚師。

輸入第一行為整數t,表示case的數目。

下面有t個case,每個case的第一行為整數n(1 <= n <= 10000),表示有n個學生。

然後給出n個正整數,數的大小不超過1000000,代表學生們心中標準的廚師編號,第乙個數為第乙個學生心中標準的廚師編號,第二個數為第二個學生的,以此類推。

數與數以空格分隔。

輸出總共有多少種分配的方式,使得所有學生都能選擇到適合自己的廚師。由於數目可能很大,你只需將答案%1000000007,再輸出即可。

315

25 8

32 1 2

5

350

由於n有10000,所以某些天真的想法會超時,**以優化或者找更好的方法替代。

d題資料有點小bug,有一組資料超出範圍,該資料是

21000000000 999999999

僅此一組,若遇到這組資料,直接輸出正確答案即可。

模擬一下,先解釋一下樣例

25 8這一組

對於第乙個學生,他有前五個廚師可以選,對於第二個學生,他有8-1個廚師可以選,那麼總的選法是5*7=35。

以此類推,如果有三個學生,對應的標準編號是a,b,c(a

#include #include 

#include

#include

using

namespace

std;

const

long

long mod=1000000007

;long

long p[10010

];int

main()

sort(p,p+n);

long

long sum=1,pos=0

;

for (int i=0;i)

printf(

"%lld\n

",sum);

}return0;

}

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...

演算法 貪心演算法

把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...

演算法 貪心演算法

集合覆蓋問題 旅行商問題等都屬於np完全問題,在數學領域上並沒有快速得到最優解的方案,非常適合用貪婪演算法。判斷方法 1.元素較少時,一般執行速度很快,但隨著元素數量增多,速度會變得非常慢 2.涉及到需要計算比較 所有的組合 情況的通常是np完全問題 3.無法分割成小問題,必須考慮各種可能的情況。這...