书架(信息学奥赛一本通-T1228)
生活随笔
收集整理的這篇文章主要介紹了
书架(信息学奥赛一本通-T1228)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目描述】
John最近買了一個書架用來存放奶牛養殖書籍,但書架很快被存滿了,只剩最頂層有空余。
John共有N頭奶牛(1≤N≤20,000),每頭奶牛有自己的高度Hi(1≤Hi≤10,000),N頭奶牛的總高度為S。書架高度為B(1≤B≤S<2,000,000,007)。
為了到達書架頂層,奶牛可以踩著其他奶牛的背,像疊羅漢一樣,直到他們的總高度不低于書架高度。當然若奶牛越多則危險性越大。為了幫助John到達書架頂層,找出使用奶牛數目最少的解決方案吧。
【輸入】
第1行:空格隔開的整數N和B。
第2~N+1行:第i+1行為整數Hi。
【輸出】
能達到書架高度所使用奶牛的最少數目。
【輸入樣例】
6 40
6
18
11
13
19
11
【輸出樣例】
3
【源程序】
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #define INF 999999999 #define N 20001 using namespace std; int a[N]; void qsort(int x,int y) {int i=x,j=y,mid=a[(x+y)/2];while(i<=j){while(a[i]>mid)i++;while(a[j]<mid)j--;if(i<=j){swap(a[i],a[j]);i++;j--;}}if(x<j)qsort(x,j);if(i<y)qsort(i,y); } int main() {int n,b;int sum=0;int i;cin>>n>>b;for(i=1;i<=n;i++)cin>>a[i];qsort(1,n);for(i=1;i<=n;i++){sum+=a[i];if(sum>=b)break;}cout<<i<<endl;;return 0; }?
總結
以上是生活随笔為你收集整理的书架(信息学奥赛一本通-T1228)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求后序遍历(信息学奥赛一本通-T1339
- 下一篇: 货币系统(信息学奥数一本通-T12973