NYOJ106 背包问题
来源:互联网 发布:java实现图文混排 编辑:程序博客网 时间:2024/05/16 14:02
题目:
背包问题
时间限制: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 <string.h>#include <algorithm>using namespace std;struct bao{ int value; int weight;//定义结构体存单个的价格,和重量} a[15];bool cmp(bao x,bao y){ return x.value>y.value;}int main(){ int t; scanf("%d",&t); while(t--) { int s,m,maxv=0; scanf("%d %d",&s,&m); for(int i=0; i<s; i++) { scanf("%d %d",&a[i].value,&a[i].weight); } sort(a,a+s,cmp);//对单位重量的价格从大到小排序 int i; for(i=0; i<s; i++) { if(m>a[i].weight) { m-=a[i].weight; maxv+=a[i].value*a[i].weight; } else { maxv+=a[i].value*m; break; } } printf("%d\n",maxv); } return 0;}思路:先对单位重量的价格(性价比最高)从大到小排序,然后再以此往背包里装,等到背包的剩余容量不足以装下下一个的时候,就把剩下的重量所有的全部装满下一个
附上最优代码:
#include<stdio.h>#define max(a,b) a>b?a:bint main(){ int n,s,m,v,w,i,j,k; scanf("%d",&n); while(n--) { int DP[25]= {0}; scanf("%d %d",&s,&m); for(i=0; i<s; i++) { scanf("%d %d",&v,&w); for(k=0; k<w; k++) for(j=m; j>0; j--) DP[j]=max(DP[j-1]+v,DP[j]); } printf("%d\n",DP[m]); }}最优代码还是看的不太懂~~
0 0
- 背包问题(nyoj106)
- nyoj106 背包问题
- 背包问题 nyoj106
- NYOJ106背包问题
- NYOJ106背包问题
- nyoj106背包问题
- nyoj106 背包问题
- nyoj106 背包问题
- NYOJ106 背包问题
- NYOJ106 背包问题
- nyoj106背包问题(贪心)
- nyoj106背包问题【贪心算法】~
- 贪心算法之——背包问题(nyoj106)
- nyoj106背包问题为模板解出杭电oj2187悼念512汶川大地震遇难同胞——老人是真饿了
- 【无限背包】背包问题
- 背包问题---01背包
- 背包问题--部分背包
- 背包问题
- android 坐标
- Sass
- HTTP协议详解
- hadoop HA机制
- bzoj 3781: 小B的询问 莫队算法+分块
- NYOJ106 背包问题
- 软件版本的管理
- 前段时间有事情了,这几天发点以前总结的东西
- MFC应用程序 变身成 windows服务程序
- 设计模式-桥接模式
- 阿里云 EDAS-HSF 环境搭建及例子编写
- 【case when】
- MySQL密码修改和删除
- mac桌面与屏膜保护程序卡死完美解决方法