NYOJ 106 背包问题(贪心,经典题目)
来源:互联网 发布:网络布局要看什么书籍 编辑:程序博客网 时间:2024/05/18 14:13
背包问题
时间限制: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<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#define MYDD 10103using namespace std;struct Q {//慢点,你会喜欢结构体的 int v;//单位重量的价值int w;//总重量} dd[32];bool cmp_v(Q x,Q y) {return x.v>y.v;//按照单位重量价值递减排序}int main() {int n,s,m,t;// m:背包容纳的总重量scanf("%d",&t);while(t--) {scanf("%d%d",&n,&m);for(int j=0; j<n; j++)scanf("%d%d",&dd[j].v,&dd[j].w);sort(dd,dd+n,cmp_v);//单位价值高的优先选取 int ans=0;for(int j=0; j<n; j++) {if(m-dd[j].w>=0) {ans=ans+dd[j].v*dd[j].w;m-=dd[j].w;} else {ans=ans+dd[j].v*m;break;}}printf("%d\n",ans);}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-背包问题(贪心)
- nyoj-背包问题(贪心)
- NYOJ 题目106 背包问题
- NYOJ题目106背包问题
- nyoj 106 背包问题 (贪心 (硬币问题))
- nyoj 106 背包问题 (dp或贪心都可)
- 单点登录SSO
- For You
- js实现继承的三种方式
- catalan数
- android之存储篇_SQLite数据库_让你彻底学会SQLite的使用
- NYOJ 106 背包问题(贪心,经典题目)
- 在Linux环境下mysql的root密码忘记解决方法 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。 2.修改MySQL的登录设置: # vi /etc/my.c
- Java中byte与16进制字符串的互相转换
- Java (for循环基础应用)
- Android RecyclerView 使用完全解析 体验艺术般的控件
- HDU 3065 病毒侵袭持续中 (AC自动机 + hdu有毒)
- Git远程操作详解
- 算法4_查找算法
- Python使用SMTP发送邮件(163,yeah等网易邮箱已测试可以)