sixfoldyuan level
获赞
206
粉丝
1
关注
0
看过 TA
3
上海大学
2019
算法工程师
IP属地:上海
Python,网络
私信
关注
2018-12-13 12:55
上海大学 算法工程师
网上信息好少
投递中移(苏州)软件技术有限公司等公司10个岗位 >
0 点赞 评论 收藏
分享
2019-02-15 17:23
已编辑
上海大学 算法工程师
题目描述 小偷来到了一个神秘的王宫,突然眼前一亮,发现5个宝贝,每个宝贝的价值都不一样,且重量也不一样,但是小偷的背包携带重量有限,所以他不得不在宝贝中做出选择,才能使偷到的财富最大,请你帮助小偷计算一下。 输入描述: 宝贝价值:6,3,5,4,6 宝贝重量:2,2,6,5,4 小偷背包容量:10 输出描述: 偷到宝贝的总价值:15 示例1 输入 6,3,5,4,6 2,2,6,5,4 10 输出 15
li-kiao:#include <stdio.h> #define BIT(n) (1<<n) int main() {     int v[5];//价值   int h[5];//重量     int c=0;//最大容量     unsigned char bit=31;//二进制11111 分别代表5个宝贝 ,选中为1,未选中为0 共有2^5种 可能性     int maxv=0;//偷到宝贝的总价值     scanf("%d,%d,%d,%d,%d",&v[0],&v[1],&v[2],&v[3],&v[4]);     scanf("%d,%d,%d,%d,%d",&h[0],&h[1],&h[2],&h[3],&h[4]);     scanf("%d",&c);     //循环32次     for(int i=0;i<=bit;i++)     {//判断选中宝贝重量之和是否小于最大容量      if(h[0]*(i&BIT(0))+h[1]*((i&BIT(1))>>1)+h[2]*((i&BIT(2))>>2)+h[3]*\   ((i&BIT(3))>>3)+h[4]*((i&BIT(4))>>4)<=c)      {   //选中宝贝价值是否大于之前的总价值          if( v[0]*(i&BIT(0))+v[1]*((i&BIT(1))>>1)+v[2]*((i&BIT(2))>>2)+v[3]*\ ((i&BIT(3))>>3)+v[4]*((i&BIT(4))>>4)>maxv)          maxv=v[0]*(i&BIT(0))+v[1]*((i&BIT(1))>>1)+v[2]*((i&BIT(2))>>2)+v[3]*\ ((i&BIT(3))>>3)+v[4]*((i&BIT(4))>>4);      }     }                 printf("\n%d\n",maxv);     return 0; } //自己用C语言写的,格式有点乱,凑合着看吧,命令行输入的逗号是英文的逗号,别弄错了 //"\"是我为了看着简洁加上的,不能运行的话删掉就行了
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务