背包问题
2016-03-30 21:27
417 查看
述
现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值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。
输出输出每组测试数据中背包内的物品的价值和,每次输出占一行。
样例输入
样例输出
现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值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。
输出输出每组测试数据中背包内的物品的价值和,每次输出占一行。
样例输入
1 3 15 5 10 2 8 3 9
样例输出
65
#include<iostream> using namespace std; int main() { int n,i,s,m,sum,j,weight; int prime[1000],weight1[1000],sum1[1000]; cin>>n; while(n--) { sum=0; cin>>s>>m; for(i=0;i<s;i++) cin>>prime[i]>>weight1[i]; for(j=0;j<s-1;j++) { for(i=0;i<s-j-1;i++) { if(prime[i]<prime[i+1]) { swap(prime[i],prime[i+1]); swap(weight1[i],weight1[i+1]); } } } // for(i=0;i<s;i++) // cout<<prime[i]<<" "<<weight1[i]<<endl; for(i=0;i<s;i++) sum1[i]=prime[i]*weight1[i]; // for(i=0;i<s;i++) // cout<<sum1[i]<<" "; i=0;weight=0; while(1) { if(weight1[i]<m) { m=m-weight1[i]; sum=sum+sum1[i]; i++; } else { sum=sum+prime[i]*m; break; } } cout<<sum<<endl; } return 0; }
相关文章推荐
- ecshop订单部分数据字典
- PHP中提问频率最高的面试题和答案
- php中单引号与双引号的区别【新浪云搬运】
- Ubuntu安装包问题汇总
- iOS开发之json解析
- Maven的综合知识点
- rhcl7的用户空间父进程systemd
- 自学ios之路(3)
- 算法:折半查找或二分查找
- DelphiXE7中创建WebService(服务端+客户端) good
- HDOJ 1018 Big Number
- Html5之高级-14 Web Socket(概述、API、示例)
- Java虚拟机
- C++智能指针(1)
- Intellij idea 常用快捷键
- java 里hibernate 注解 clob blob
- u-boot分析导读
- Java解析XML的四种方法--JDOM
- CSS3 timing-function: steps() 详解
- 实验c++2-1