南阳题目106-背包问题
来源:互联网 发布:工业大数据 编辑:程序博客网 时间:2024/06/05 04:22
背包问题
时间限制: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<cstdio>#include<cstring>#include<algorithm>using namespace std;struct node {int w,v;double p;}s[10010];bool cmp(node x,node y){return x.v>y.v;}int main(){int M,n,m,i,j,a,b;scanf("%d",&M);while(M--){scanf("%d%d",&m,&n);for(i=0;i<m;i++)scanf("%d%d",&s[i].v,&s[i].w);sort(s,s+m,cmp);double sum=0;for(i=0;i<m;i++){if(s[i].w<=n){sum+=s[i].v*s[i].w;n-=s[i].w;}else{sum+=n*s[i].v;break;}}printf("%.0lf\n",sum);}return 0; }
0 0
- 南阳题目106-背包问题
- 南阳oj NYoj 贪心 题目106 背包问题
- 南阳 106 背包问题
- 南阳oj 106 背包问题
- 南阳理工ACM 106 背包问题
- 南阳理工ACM 106 背包问题
- 题目106 背包问题
- 题目106:背包问题
- 南阳理工:背包问题
- 南阳理工:背包问题
- 南阳OJ 背包问题
- 南阳oj106 背包问题
- 南阳理工OJ_题目311 完全背包
- NYOJ 题目106 背包问题
- NYOJ题目106背包问题
- 南阳理工--103背包问题
- 南阳题目57-6174问题
- 南阳题目77-开灯问题
- 关于vi/vim一些小问题
- Robot Framework 学习笔记(一)
- 浏览器的内核(装X用,属于基础知识类,但开发根本用不到)
- ProgressBar与seekBar的区别
- 图片与文字并排显示的导航
- 南阳题目106-背包问题
- AndroidStudio 2.0的新特性
- 方法的重载
- 使用Fragment实现ViewPager滑动
- 个人初做小游戏RunRunMagic(一) 主要思想
- 美团 棋子翻转
- R语言︱list用法、批量读取、写出数据时的用法
- chorme浏览器最新版本跨域设置
- 设计模式六大原则(3):依赖倒置原则