zoukankan      html  css  js  c++  java
  • 洛谷 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可以吃到的最大脂肪指数和。

     

    输入输出样例

    输入样例#1: 复制
    6 6 3
    3 3 2
    15 1
    15 2
    10 2
    15 2
    10 2
    5 3
    输出样例#1: 复制
    60

    思路:贪心+模拟 难度:普及-
    //抄的某人的题解,嘻嘻(http://www.cnblogs.com/song-/
    #include<bits/stdc++.h>
    using namespace std;
    int n, m, k;
    int ans, tot;
    int limit[205], w[205];
    inline bool ccmp(int x, int y) {
        return x > y;
    }
    struct Node {
        int tot, b[205];
        void cmp() {
            sort(b+1, b+1+tot, ccmp);
        }
    } a[205];
    int main() {
        cin >> n >> m >> k;
        for(int i = 1; i <= k; i++) cin >> limit[i];
        for(int i = 1; i <= n; i++) {
            int w, j;
            cin >> w >> j;
            a[j].b[++a[j].tot] = w;
        }
        for(int i = 1; i <= k; i++) a[i].cmp();
        for(int i = 1; i <= k; i++)
            for(int j = 1; j <= limit[i] && j <= a[i].tot; j++)
                w[++tot] = a[i].b[j];
        sort(w+1, w+1+n, ccmp);
        for(int i = 1; i <= m; i++) ans += w[i];
        cout << ans;
        return 0;
    }
     
  • 相关阅读:
    【纯水题】POJ 1852 Ants
    【树形DP】BZOJ 1131 Sta
    【不知道怎么分类】HDU
    【树形DP】CF 1293E Xenon's Attack on the Gangs
    【贪心算法】CF Emergency Evacuation
    【思维】UVA 11300 Spreading the Wealth
    【树形DP】NOI2003 逃学的小孩
    【树形DP】BZOJ 3829 Farmcraft
    【树形DP】JSOI BZOJ4472 salesman
    【迷宫问题】CodeForces 1292A A NEKO's Maze Game
  • 原文地址:https://www.cnblogs.com/v-vip/p/8637367.html
Copyright © 2011-2022 走看看