[USACO22DEC] Bribing Friends G

news/2024/12/30 3:46:24/

洛谷[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))

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;
}

http://www.ppmy.cn/news/881681.html

相关文章

Antd的Select组件二次封装

提示&#xff1a;Select组件二次封装的目的,是为了在系统里面更方便、简洁地使用Select 这是官方写的使用方法是: import React from react; import { Select } from antd;const handleChange (value: string) > {console.log(selected ${value}); };const App: React.FC …

热血江湖服务器维护,热血江湖封闭测试

本词条缺少概述图&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来编辑吧&#xff01; 公开测试将进行升天系列与六次转职的相关功能的测试&#xff0c;玩家建立角色后就会获得115等级和装备&#xff0c;在本次测试结束后&#xff0c;相关的人…

分布式数据库HBase,它到底是怎么组成的?

原文链接&#xff1a;http://www.ibearzmblog.com/#/technology/info?id3f432a2451f5f9cb9a14d6e756036b67 前言 大数据的核心问题无非就是存储和计算这两个。Hadoop中的HDFS解决了数据存储的问题&#xff0c;而HBase就是在HDFS上构建&#xff0c;因此Hbase既能解决大数据存…

Spring - 更简单的获取 Bean 对象

目录 二、获取 Bean 对象&#xff08;对象装配或者对象注入&#xff09; 1. 属性注入 1.1 属性注入的优点和缺点&#xff1a; 2. Setter注入 2.1 Setter注入的优点和缺点 3. 构造方法注入&#xff08;spring 官方推荐的对象注入方式&#xff09; 3.1 构造方法的优点和缺点…

比亚迪半导体IPO再生波折:又被中止审核 红杉小米是股东

雷递网 雷建平 4月1日报道 2022年1月底刚刚过会的比亚迪半导体上市再生波折&#xff0c;于2022年3月31日的审核再度被中止。 这不是比亚迪半导体IPO审核第一次被深交所中止。2021年8月8日&#xff0c;因律师北京市天元律师事务所被中国证监会立案调查&#xff0c;比亚迪半导体被…

小米上市 365 天:雷军的坚守与败退

雷军一直憧憬&#xff0c;让小米从硬件公司转型互联网公司&#xff0c;经过一年的努力&#xff0c;这个浩荡的工程远没有完工。所有的调整&#xff0c;都还处于“让子弹飞一会儿”的状态&#xff0c;尚未见到成效。 作者 | 刘亚杰 本文经授权转载自一点财经&#xff08;ID&…

Vue3+ts;枚举(enum);Partial全部可选/Pick选一部分/配置 svg 图标/unplugin-vue-components组件自动按需加载

项目的创建 使用 create-vue 脚手架创建项目。 1.执行创建命令 pnpm create vue # or npm init vuelatest # or yarn create vue2.选择项目依赖内容。 ✔ Project name: … //项目名 ✔ Add TypeScript? … No / Yes ✔ Add JSX Support? … No / Yes ✔ Add Vue Router …

重磅!大基金、华为、小米共同投资这家芯片公司!

近日&#xff0c;思特威&#xff08;上海&#xff09;电子科技有限公司在21日发生工商变更&#xff0c;此轮融资新增投资方包括大基金二期、小米长江产业基金、安芯投资等知名机构。 今年8月初&#xff0c;思特威刚刚获得华为旗下哈勃投资的注资。2018年8月&#xff0c;在思特威…