码迷,mamicode.com
首页 > 其他好文 > 详细

3 B. Lorry

时间:2015-09-28 20:57:52      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

题目大意:给你两种物品,每种物品有一个价值和花费,花费只有两种,一种花费为 1, 一种花费为2.、
给你一个背包容量为v, 求当前容量下所能达到的最大价值。
==========================================================


#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cstdlib>
using namespace std;
typedef __int64 LL;
const LL INF = 0xffffff;
const int maxn = 100005;
const LL MOD = 1e9+7;

struct node
{
    int cost;///花费
    int value;///价值
    int index;///下标
    bool friend operator < (node A, node B)
    {
        return A.value > B.value;///按照单价进行排序
    }
}One[maxn], Tow[maxn], P;
int sum[maxn] = {0}, ans[maxn];
int main()
{
    int n, Cost;
    int num1 = 1, num2 = 1;///Last 最后一个价值为 1 物品的下标。
    scanf("%d %d", &n, &Cost);

    for(int i=1; i<=n; i++)
    {
        scanf("%d %d",&P.cost, &P.value);
        P.index = i;
        if(P.cost == 1)
            One[num1 ++] = P;
        else
            Tow[num2 ++] = P;
    }
    sort(One+1, One + num1+1);
    sort(Tow+1, Tow + num2+1);
    Tow[0].cost = 0, Tow[0].value = 0;
    for(int i=1; i< num1; i++)
        sum[i] += sum[i-1] + One[i].value;

    int Index = 0, Max = 0, Temp, CurValue = 0, CurCost = 0;
    for(int i=0; i< num2; i++)
    {
        CurValue += Tow[i].value;
        CurCost += Tow[i].cost;
        if(CurCost > Cost)
            break;

        if(Cost - CurCost >= num1-1)
            Temp =  CurValue + sum[num1-1];
        else
            Temp =  CurValue + sum[Cost - CurCost];

        if(Temp > Max)
        {
            Max = Temp;
            Index = i;
        }
    }

    printf("%d\n", Max);
    int k = 0;
    for(int i=1; i<=Index; i++)
        ans[k ++] = Tow[i].index;

    for(int i=1; i<=(Cost-Index*2)&& i<num1; i++)
        ans[k ++] = One[i].index;

    for(int i=0; i<k-1 ;i++)
        printf("%d ", ans[i]);
    if(k != 0)
        printf("%d\n", ans[k-1]);

    return 0;
}
/*
10 10
1 14
2 15
2 11
2 12
2 9
1 14
2 15
1 9
2 11
2 6
*/

 

3 B. Lorry

标签:

原文地址:http://www.cnblogs.com/chenchengxun/p/4844846.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!