首页 > 其他分享 >P2240 【深基12.例1】部分背包问题

P2240 【深基12.例1】部分背包问题

时间:2024-03-03 21:44:35浏览次数:20  
标签:arr 12 int 深基 P2240 ans 最优 coin 贪心

题目大意
给定n个元素的基本信息,代价与价值,计算每个元素的性价比,使其和最大
显然,本题可以以贪心的思想去解决,每个元素可以分裂,因而不需要考虑全局最优解,所以可以贪心。其中,计算每个元素的性价比,即a.v / a.m > b.v / b.m,根据这个式子可变形得a.v * b.m > b.v * a.m,化除为乘,更加精确,根据性价比排序收集

#include <algorithm>
#include <iostream>
using namespace std;
struct coin
{
	int m;
	int v;
};
const int maxn = 100 + 5;
coin arr[maxn];
bool cmp(coin a,coin b)
{
	return a.v * b.m > b.v * a.m;
}
float ans = 0;
int main()
{
	int n,t;
	cin >> n >> t;
	for(int i = 0; i < n; i++)
	{
		cin >> arr[i].m >> arr[i].v;
	}
	sort(arr,arr+n,cmp);
	int i;
	for(i = 0; i < n; i++)
	{
		if(t >= arr[i].m)
		{
			t -= arr[i].m;
			ans += arr[i].v;
		}
		else break;
	}
	if(i < n)ans += 1.0 * t / arr[i].m * arr[i].v;
	printf("%.2f\n",ans);
	return 0;
}

聊点闲话
贪心,更多的是一种思想,而并非一种算法,至于目光短浅,有时并非是一种坏事,有时,保持当前状态的最优解就能保证全局最优解,这就是贪心的思想,即局部最优。而贪心的正确性证明并不显然,只要举出反例,就能证明不可行。
证明贪心的合理性有以下几种方法
假设选择方案不是贪心要求的方案,证明贪心更好,至少不会更差
写一个暴力枚举搜索版本,答案一致,贪心很有可能是靠谱的
数学归纳法,步步最优,全局最优

标签:arr,12,int,深基,P2240,ans,最优,coin,贪心
From: https://www.cnblogs.com/coder2023/p/18050779

相关文章

  • CF1312C Adding Powers 题解
    题意:对于一个初始全\(0\)的序列,问是否能够进行若干次操作(第\(i\)次操作为对序列中任意一个元素增加\(k^i\)),使得此序列变为目标数组\(a\)。首先,我们令需要进行操作的序列为\(b\)。我们知道,如果能通过若干次操作将\(b\)变为\(a\),则有以下三种情形:\(a\)中的元素全......
  • 牛客练习赛122
    牛客练习赛122黑白配代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;typedefdoubledb;#definefifirst#definesesecondusingi128=__int128_t;usingpiii=pair<ll,pair<ll,ll>>;cons......
  • 20211121杨博川《密码工程》1、2章笔记
    一二章笔记@目录一二章笔记第1章密码学研究范围思维导图知识概述1.1密码学作用1.2木桶原理1.3对手设定1.4专业偏执狂1.5威胁模式1.6密码学不是唯一解决方案1.7密码学是非常难的1.8密码学是简单的部分1.9通用攻击1.10安全性和其他设计准则1.11更多阅读材料1.12专业偏执狂练习第2......
  • Programming Abstractions in C阅读笔记:p312-p326
    《ProgrammingAbstractionsinC》学习第77天,p312-p326,总计15页,第7章完结。一、技术总结第7章主要讲算法分析——引入时间复杂度这一概念来评估算法的快慢。时间复杂度使用大O符号来表示。第7章以排序算法为示例,包含:选择排序,归并排序以及快速排序,这些基本的排序算法都是我们要......
  • day52 动态规划part10 代码随想录算法训练营 122. 买卖股票的最佳时机 II
    题目:122.买卖股票的最佳时机II我的感悟:只要定义清楚,就可以做出来的。理解难点:先判断等于听课笔记:看了文字版本,感觉还是我的思路最牛逼!!我的代码:classSolution:defmaxProfit(self,prices:List[int])->int:#dp[i]为截止到当前能获得的最大利润......
  • day53 动态规划part10 代码随想录算法训练营 121. 买卖股票的最佳时机
    题目:121.买卖股票的最佳时机我的感悟:soeasy 打印dp确实能发现问题理解难点:注意条件,及时更新dp听课笔记:看了,老师的代码,感觉没有我的简洁,哈哈!!我的代码:classSolution:defmaxProfit(self,prices:List[int])->int:#设dp[i]为截止到当前能获得......
  • 3121005947
    这个作业属于哪个课程软件工程2024-双学位(广东工业大学)这个作业要求在哪里软件工程第一次作业这个作业的目标学习Markdown语言、撰写博客目录软件工程第一次作业1.评估自己1.1个人介绍1.2当前值1.3项目经历2.展望未来2.1阅读《构建之法》2.2未来的职......
  • 牛客练习赛122
    目录写在前面ABCDE写在最后写在前面比赛地址:https://ac.nowcoder.com/acm/contest/75768。因为suzt大神在打所以也来凑一凑热闹。A签到。///*By:Luckyblock*/#include<bits/stdc++.h>#defineLLlonglong//=====================================================......
  • P2532 [AHOI2012] 树屋阶梯 题解
    P2532[AHOI2012]树屋阶梯题解容易发现答案是卡特兰数,那么考虑证明这一点。考虑从左下角到右上角填满格子。利用动态规划的思想,回忆一下某道\(IOI\)的题目[数字三角形],每个格子的方案都只能由其左边或下边转移而来。可以结合图理解一下。好,刚才这个定义显然很符合卡特兰......
  • 牛客练习赛122题解A-D
    牛客练习赛122A.黑白配代码:#include<bits/stdc++.h>usingnamespacestd;constintMAXN=1e5+7;constintINF=0x3f3f3f3f;typedeflonglongll;#defineendl"\n"voidsolve(){ intt,n;cin>>t>>n;inta[n+1];while(t--)......