NYOJ题目106背包问题
来源:互联网 发布:薛之谦为什么复婚知乎 编辑:程序博客网 时间:2024/05/04 10:50
背包问题
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。
- 输入
- 第一行输入一个正整数n(1<=n<=5),表示有n组测试数据;
随后有n测试数据,每组测试数据的第一行有两个正整数s,m(1<=s<=10);s表示有s个物品。接下来的s行每行有两个正整数v,w。 - 输出
- 输出每组测试数据中背包内的物品的价值和,每次输出占一行。
- 样例输入
13 155 102 83 9
- 样例输出
65
# include <stdio.h># include <stdlib.h>struct pack{int v;int w;};int cmp(const void *a, const void *b){struct pack *c = (pack *)a;struct pack *d = (pack *)b;if (c->v != d->v)return d->v - c->v;elsereturn d->w - c->w;}int main(void){int n;scanf("%d", &n);while (n--){ int s, m, i;struct pack p[10];scanf("%d %d", &s, &m);for (i=0; i<s; ++i)scanf("%d %d", &p[i].v, &p[i].w); qsort(p, s, sizeof(p[0]), cmp); int j=0, sum=0;while (sum < m){sum = sum + p[j].w;j++;}int sumv = 0;if (sum == m){for (i=0; i<j; ++i)sumv = sumv + p[i].v*p[i].w;printf("%d\n", sumv);}else{int heavy = 0; for (i=0; i<j-1; ++i){sumv = sumv + p[i].v*p[i].w; heavy = p[i].w + heavy;}p[i].w = m - heavy;sumv = sumv + p[i].w*p[i].v;printf("%d\n", sumv);}}return 0;}
0 0
- NYOJ 题目106 背包问题
- NYOJ题目106背包问题
- nyoj 题目106 :背包问题 贪心算法
- NYOJ题目106-背包问题(贪心)
- 贪心——NYOJ题目106 背包问题
- 南阳oj NYoj 贪心 题目106 背包问题
- NYOJ 106 背包问题(贪心,经典题目)
- NYOJ 106 背包问题
- nyoj 106 背包问题
- NYOJ-106:背包问题
- 【nyoj】106~背包问题
- NYOJ 106 背包问题
- nyoj-106-背包问题
- NYOJ,106,背包问题
- nyoj 106 背包问题
- NYOJ 106 背包问题
- NYOJ 106 背包问题
- NYOJ-106-背包问题
- Linux下安装JDK
- pyQt 每日一练习 -- 登录框
- 天猫大数据3—回归模型
- 【编程珠玑】第四章:编写正确的程序
- 字符串移动*位于之母前
- NYOJ题目106背包问题
- POJ 3255 Roadblocks 次短路
- Qt QLabel::setBuddy函数简介
- 关于runtime的理解
- (ZZ)常量字符串为什么位于静态存储区?
- 简单选择排序
- 北京邀请赛
- UVa 10422 - Knights in FEN
- strcpy和memcpy区别