[USACO22DEC] Bribing Friends G

这篇具有很好参考价值的文章主要介绍了[USACO22DEC] Bribing Friends G。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

洛谷[USACO22DEC] Bribing Friends G

题目大意

B B B n n n个朋友,每个朋友有一个受欢迎度 p i p_i pi。小 B B B想邀请部分朋友和他去看电影,且想要最大化这些朋友的受欢迎程度之和。对于朋友 i i i,只有当小 B B B给他 c i c_i ci元钱,他才会答应去。如果小 B B B给他 x i x_i xi个冰激凌,他还可以给小 B B B一元的折扣。小 B B B可以从朋友那里得到任意整数数量的折扣,只要不是这些朋友倒贴他。

B B B a a a元钱和 b b b个冰激凌,求他在采用最佳策略的情况下,可以达到的最大的受欢迎程度之和。

1 ≤ n ≤ 2000 , 0 ≤ a , b ≤ 2000 1\leq n\leq 2000,0\leq a,b\leq 2000 1n2000,0a,b2000


题解

将朋友根据 x i x_i xi从小到大排序,那么显然冰激凌对前面的朋友用,钱对后面的朋友用才更优。而且,既用了冰激凌又用了钱的朋友最多只有一个,因为如果有两个,则将后一个的冰激凌用在前一个,前一个的钱用在后一个,这样能使要用的冰激凌数量更少。

用两个背包来处理。设 f i , j f_{i,j} fi,j表示前 i i i个朋友中花费 j j j个冰激凌能邀请到朋友的最大欢迎度, g i , j g_{i,j} gi,j表示第 i i i个朋友到第 n n n个朋友中花费 j j j元钱能邀请到朋友的最大欢迎度。那么

  • 如果没有既用了冰激凌又用了钱的朋友,则枚举最后一个只用了冰激凌的朋友,更新答案
  • 如果有既用了冰激凌又用了钱的朋友,则枚举这个朋友,并枚举这个朋友所花费的冰激凌和钱,更新答案

时间复杂度为 O ( n ( a + b ) ) O(n(a+b)) O(n(a+b))文章来源地址https://www.toymoban.com/news/detail-554371.html

code

#include<bits/stdc++.h>
using namespace std;
int n,v1,v2,ans,f[2005][2005],g[2005][2005];
struct node{
	int p,c,x;
}w[2005];
bool cmp(node ax,node bx){
	return ax.x<bx.x;
}
int main()
{
	scanf("%d%d%d",&n,&v1,&v2);
	for(int i=1;i<=n;i++){
		scanf("%d%d%d",&w[i].p,&w[i].c,&w[i].x);
	}
	sort(w+1,w+n+1,cmp);
	for(int i=1;i<=n;i++){
		for(int j=0;j<=v2;j++){
			f[i][j]=f[i-1][j];
			if(j>=w[i].c*w[i].x)
			f[i][j]=max(f[i][j],f[i-1][j-w[i].c*w[i].x]+w[i].p);
		}
	}
	for(int i=n;i>=1;i--){
		for(int j=0;j<=v1;j++){
			g[i][j]=g[i+1][j];
			if(j>=w[i].c) g[i][j]=max(g[i][j],g[i+1][j-w[i].c]+w[i].p);
		}
	}
	ans=g[1][v1];
	for(int i=1;i<=n;i++){
		ans=max(ans,f[i][v2]+g[i+1][v1]);
		for(int j=v2,k=0;j>=0&&k<=w[i].c;j-=w[i].x,k++){
			if(v1-w[i].c+k>=0)
			ans=max(ans,f[i-1][j]+g[i+1][v1-w[i].c+k]+w[i].p);
		}
	}
	printf("%d",ans);
	return 0;
}

到了这里,关于[USACO22DEC] Bribing Friends G的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [USACO07DEC] Sightseeing Cows G(分数规划+负权回路判定)

    [USACO07DEC] Sightseeing Cows G - 洛谷 题目大意: 给出一张n点m边的带点权带边权的有向图 求一个回路使得路上点权和除以边权和最大(最优比率回路) 首先一定仔细读题,是回路不是路径 由于回路上所有点权只能获取一次,但边权会获取很多次,所以最优解一定是简单回路(无

    2024年02月10日
    浏览(248)
  • P2921 [USACO08DEC] Trick or Treat on the Farm G

    Portal. 每只奶牛的终止条件是到达自己已经访问过的点,换言之,就是该奶牛的路线构成了一个环。并且,每一个房间通往的房间都是固定且唯一的,所以说只要进入的这个房间在环上,这个房间之后会获得的糖果数已经固定了。 我们开一个数组 s 记录当前位置的糖果数量,

    2024年02月06日
    浏览(235)
  • [USACO23JAN] Lights Off G题解

    洛谷[USACO23JAN] Lights Off G 题目大意 贝西想要睡觉,但是农场的灯一直开着,影响它睡觉。 贝西有两个长度为 n n n 的 01 01 01 字符串,分别表示 n n n 盏灯的序列和开关的序列。其中,表示灯的序列, 0 0 0 表示关灯, 1 1 1 表示开灯;表示开关的序列, 1 1 1 表示可操控的, 0 0

    2024年02月13日
    浏览(32)
  • P2730 [USACO3.2] 魔板 Magic Squares 题解

    夜深人静的夜晚,我开了这道题。看起来,完成它是一件轻而易举的事。我想了想,打开Dev-C++,开始写代码。 然而,那时的我还不知道,我踏入了深渊...... 咳咳,中二病犯了,前面的文字请忽略。 题目要求最少操作次数,显然,我们要使用BFS来求解。 对于每个节点,接下

    2024年02月13日
    浏览(30)
  • 【题解】JZOJ6578 / 洛谷P5201[USACO2019Jan]Shortcut G

    洛谷 P5201 [USACO19JAN] Shortcut G 在一个带权无向连通图上,每个点有 a i a_i a i ​ 只奶牛,奶牛会走最短路径到 1 1 1 ,如果有多条路径,选择字典序最小的,定义移动总时间为所有奶牛走到 1 1 1 的时间之和。你可以修建一条从任意一点到 1 1 1 的边权为 t t t 的边,奶牛只有在平时

    2024年02月11日
    浏览(29)
  • [USACO11MAR] Brownie Slicing G题解(二分+二维前缀和+矩阵分割)

    题目地址 P3017 [USACO11MAR] Brownie Slicing G 二分最大化最小值 切割思路: 一行一行进行切割,如果这一行可以切割出b块大于等于mid的块,就开始切割下一行 如果无法切割出b块,就把正在切割的行与下一行拼起来一起切割 最后通过能切割出b块的水平块块够不够a条来判断m是否合

    2024年02月07日
    浏览(38)
  • Three Friends

    有一个字符串 S S S ,对他进行操作: 将 S S S 复制为两份,存在字符串 T T T 中 在 T T T 的某一位置上插入一个字符,得到字符串 U U U 现在给定 U U U ,求 S S S 。 第一行一个整数 N N N 代表 U U U 的长度。 第二行 N N N 个字符代表字符串 U U U 。 如果不能通过上述的步骤从 S S S 推

    2024年02月10日
    浏览(25)
  • HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face

    HuggingGPT 让LLM发挥向路由器一样的作用,让LLM来选择调用那个专业的模型来执行任务。 HuggingGPT搭建LLM和专业AI模型的桥梁。 Language is a generic interface for LLMs to connect AI models Task Planning: 将复杂的任务分解。但是这里是将任务分解为一系列的structured tasks。还可以通过之前的 ch

    2024年02月15日
    浏览(42)
  • 《2023 HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face》阅读笔记

    借助大语言模型(LLMS)在语言理解生成推理等方面表现出的出色能力,考虑将其作为控制器来管理现有的各种AI模型, 把语言作为通用接口 。基于这一理念,提出了HuggingGPT框架,利用LLMS(ChatGPT)来连接机器学习社区(Hug face)中的各种AI模型,具体来说就是在接收用户请求

    2024年02月02日
    浏览(62)
  • openssl3.2 - 官方demo学习 - cms - cms_dec.c

    对用证书加密的CMS数据进行解密(也需要加密时用的那个证书)

    2024年01月20日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包