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

rqnoj 庆功会

时间:2014-11-15 18:46:50      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   os   sp   for   strong   div   

题目描述

八(1)班由于在期中考中获得了团体第一名,班主任吴老师决定开一场庆功会。于是购买东西的任务就交给了小李同学(钱由班会出)。由于小李同学四肢发达,头脑简单,于是这个任务便落到了你头上(当然不要你跑腿。跑腿是小李的事 ^_^)

注:可以全买,但不能不买。即至少买1种

输入格式

第一行二个数n(n<=500),m(m<=5000),其中n代表希望购买的物品的种数,m表示班会拨给小李的钱数。

接下来n行,每行3个数,v、w、s,分别表示第I种物品的价格、价值(价格 与 价值 是不同的概念)和购买的数量(只能买0件或s件),其中v<=100,w<=1000,s<=10

输出格式

共两行:

第一行:一个数,表示此次购买能获得的最大的价值(注意!不是价格)。

第二行:小李此次购买(能获得的最大价值)所选择的物品种类的序号。

样例输入
样例输出
 
提交题目 bubuko.com,布布扣 Error [ 更改语言 ] Language
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
struct ss
{
       int c;
       bool a[501];
} f[100000];
int n,m,v,w,s,en;
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;++i)
    {
        scanf("%d%d%d",&v,&w,&s);
        v*=s; w*=s;
        for (int j=m;j>=v;--j)
            if (f[j-v].c+w>f[j].c)
            {
                                  f[j]=f[j-v];
                                  f[j].c+=w;
                                  f[j].a[i]=true;
            }
    }
    for (int i=n;i>=1;--i)
        if (f[m].a[i])
        {
                      en=i;
                      break;
        }
    printf("%d\n",f[m].c);
    for (int i=1;i<en;++i)
        if (f[m].a[i]) printf("%d ",i);
    printf("%d\n",en);
    return 0;
}
      

  

rqnoj 庆功会

标签:blog   http   io   ar   os   sp   for   strong   div   

原文地址:http://www.cnblogs.com/a972290869/p/4099739.html

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