洛谷——P2095 营养膳食
生活随笔
收集整理的這篇文章主要介紹了
洛谷——P2095 营养膳食
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
Mr.L正在完成自己的增肥計劃。
為了增肥,Mr.L希望吃到更多的脂肪。然而也不能只吃高脂肪食品,那樣的話就會導致缺少其他營養。Mr.L通過研究發現:真正的營養膳食規定某類食品不宜一次性吃超過若干份。比如就一頓飯來說,肉類不宜吃超過1份,魚類不宜吃超過1份,蛋類不宜吃超過1份,蔬菜類不宜吃超過2份。Mr.L想要在營養膳食的情況下吃到更多的脂肪,當然Mr.L的食量也是有限的。
輸入輸出格式
輸入格式:
第一行包含三個正整數n(n≤200),m(m≤100)和k(k≤100)。表示Mr.L每頓飯最多可以吃m份食品,同時有n種食品供Mr.L選擇,而這n種食品分為k類。第二行包含k個不超過10的正整數,表示可以吃1到k類食品的最大份數。接下來n行每行包括2個正整數,分別表示該食品的脂肪指數ai和所屬的類別bi,其中ai≤100,bi≤k。
輸出格式:
包括一個數字即Mr.L可以吃到的最大脂肪指數和。
輸入輸出樣例
輸入:
6 6 3 3 3 2 15 1 15 2 10 2 15 2 10 2 5 3輸出: 60
其實是一個大水題,難點在于怎樣理解題目,開始的時候我感覺應該是每一種菜可以隨便選,但是這種菜的選擇的個數有限,但是這樣做的會就會被樣例直接卡死。然后我就感覺是不是思路出錯了啊,結果果真是思路除了問題。
這個題假如我們有5種菜屬于第2個種類吧且第二種菜可以選3個,那么我們只能在這五種菜中選擇3個
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 505 using namespace std; int n,m,k,x,s[N],sum,ans; int read() {int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return x*f; } struct Node {int w,num; }node[N]; int cmp(Node a,Node b) {return a.w>b.w; } int main() {m=read(),n=read(),k=read();for(int i=1;i<=k;i++)s[i]=read();for(int i=1;i<=m;i++){node[i].w=read();node[i].num=read();}sort(node+1,node+1+m,cmp);for(int i=1;i<=m;i++){if(s[node[i].num]){s[node[i].num]--;n--;ans+=node[i].w;}if(n==0) break;}printf("%d",ans);return 0; }
?
轉載于:https://www.cnblogs.com/z360/p/8024842.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的洛谷——P2095 营养膳食的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea历史版本下载
- 下一篇: MVP感言