【动态规划】【RQNOJ】庆功会
2010-07-04 15:31
337 查看
题目描述
八(1)班由于在期中考中获得了团体第一名,班主任吴老师决定开一场庆功会。于是购买东西的任务就交给了小李同学(钱由班会出)。由于小李同学四肢发达,头脑简单,于是这个任务便落到了你头上(当然不要你跑腿。跑腿是小李的事 ^_^)注:可以全买,但不能不买。即至少买1种
输入格式
第一行二个数n(n<=500),m(m<=5000),其中n代表希望购买的物品的种数,m表示班会拨给小李的钱数。接下来n行,每行3个数,v、w、s,分别表示第I种物品的价格、价值(价格 与 价值 是不同的概念)和购买的数量(只能买0件或s件),其中v<=100,w<=1000,s<=10
输出格式
共两行:第一行:一个数,表示此次购买能获得的最大的价值(注意!不是价格)。
第二行:小李此次购买(能获得的最大价值)所选择的物品种类的序号。
样例输入
#include<stdio.h> 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】第2题 开心的金明 C源码
- 【解题报告】[动态规划] RQNOJ - PID273 / 马棚问题
- 【动态规划】【RQNOJ】吃西瓜
- 【动态规划】【RQNOJ】装箱问题
- 【动态规划】【RQNOJ】纪念品分组【恶搞版】
- 【动态规划】【RQNOJ】可怜的Oliver
- 动态规划 RQNOJ 吃西瓜 最大子段和三维版
- 【解题报告】[动态规划] RQNOJ - PID105 / 核电站问题
- 【动态规划】【RQNOJ】刘翔!加油!
- 【动态规划】【RQNOJ】[AHOI1997]彩旗飘飘
- 【动态规划】逃亡的准备rqnoj98
- 【解题报告】[动态规划] RQNOJ - PID38 / 串的记数
- 【动态规划】【RQNOJ】大地的秘密
- 【解题报告】[动态规划] RQNOJ - PID15 / 采药
- 【动态规划】【RQNOJ】书的复制
- 【动态规划】逃亡的准备rqnoj98
- 【解题报告】[动态规划]RQNOJ - PID82 / 又上锁妖塔
- 【解题报告】[动态规划]RQNOJ - PID72 / 拔河比赛
- 【动态规划】【RQNOJ】公司聚会
- 【动态规划】【RQNOJ】马棚问题