桐桐的运输方案

题目描述

桐桐有N件货物需要运送到目的地,它们的质量和价值分别记为:
质量:W1,W2,…,Wn;
价值:V1,V2,\ldtos,Vn;
已知某辆货车的最大载货量为x
,并且当天只能运送一趟货物。这辆货车应该运送哪些货物,才能在不超载的前提下使运送的价值最大?

输入描述

第1行是一个实数,表示货车的最大载货量x(1<x≤100)。
第2行是一个正整数,表示待运送的货物数n(1<n≤20)。
后面n行每行两个用空格隔开的实数,分别表示第1至第n件货物的质量w和价值V。

输出描述

第1行为被运送货物的总价值(只输出整数部分);
第2行为按编号大小顺序输出所有被运送货物的编号(当一件都不能运送时,不输)。

样例

输入
20
4
3.5 4
4 5
5 6.8
6.9 7
输出
22
1 2 3 4

代码如下:

#include<bits/stdc++.h>
using namespace std;

double x,w[100],v[100]; //存放数据
int n,id,ido;  //用二进制来表示物品选取的状态
double maxv=0;

void dfs(int t,int id,double vv,double ww)
{

	if(ww>x || t==n+2) //返回条件
		return;
	if(vv>maxv)  //数据更新
	{
		maxv=vv;
		ido=id;
	}
	/*
	if(vv>maxv) 	//这种写法是不对的
	{				//因为有质量限制的原因,
		maxv=vv;	//所以dfs应当先写出返回条件
		ido=id;
	}
	if(ww>x || t==n+1)
		return;
	*/
	dfs(t+1,id+(1<<(t-1)),vv+v[t],ww+w[t]); //取第t个物品
	dfs(t+1,id,vv,ww); //不取第t个物品
}

int main()
{
	cin>>x>>n;
	for(int i=1; i<=n; i++)
	{
		cin>>w[i]>>v[i];
	}
	dfs(1,0,0,0);
	cout<<(int)maxv<<endl; //强制输出
	for(int i=1; i<=n; i++)
	{
		if((1<<(i-1))&ido)
			cout<<i<<" ";
	}
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在给定的引用中,题目描述了桐桐去购物的情景以及她需要解决的计算问题。为了帮助桐桐解决这个问题,我们可以使用引用提供的C语言代码来实现。这段代码使用了一个嵌套循环,其中i表示购买的公鸡数量,j表示购买的母鸡数量,k表示购买的小鸡数量。通过枚举i和j的取值,我们可以计算出k的值,并检查是否满足买鸡的总金额。如果满足条,我们就输出对应的i、j和k的值。这样就可以得到所有满足要求的买鸡方案。所以,桐桐可以使用C语言中的函数来解决购买鸡的问题。标准库中提供了一些与输入输出相关的函数,比如scanf和printf,可以用于读取用户输入和输出结果。另外,还可以使用循环和条语句来处理计算逻辑并输出结果。这样,桐桐就可以通过编写C语言代码来解决她的购买鸡的问题了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [桐桐购物C++](https://blog.csdn.net/weixin_51188609/article/details/119278128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [聪明人的游戏提高篇:第三章第一课:ji (桐桐去购物)](https://blog.csdn.net/DUXS11/article/details/125468434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值