C. Dima and Salad

题意

有n种水果,第i个水果有一个美味度ai和能量值bi,现在要选择部分水果做沙拉,假如此时选择了m个水果,要保证\(\frac{\sum_{i=1}^ma_i}{\sum_{i=1}^mb_i}==k\),问沙拉最大的美味度是多少?

思路

01背包变形。

对于给出的公式,我们化简一下:

\(\sum_{i=1}^ma_i-k*\sum_{i=1}^mb_i==0\)

就变成了把a[i]-k*b[i]作为体积,a[i]作为价值,向容量为0的背包里放,可以取得的最大价值。

因为a[i]-k*b[i]有正负,所以我们可以分别对正体积和负体积DP,体积为0直接算到答案中,在正负的DP值之中选择体积绝对值相等的最大和。

代码

//#include<bits/stdc++.h>
#include<vector>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<math.h>
#include<queue>
#include<map>
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e5+10;
const int mod=1e9+7;
const int inf=0x3f3f3f3f; struct note
{
int a,b;
int wei;
} arr[N];
int dp1[N],dp2[N];
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1; i<=n; i++)
scanf("%d",&arr[i].a);
int spos=0,sneg=0,ans=0;
for(int i=1; i<=n; i++)
{
scanf("%d",&arr[i].b);
int tmp=arr[i].a-k*arr[i].b;
arr[i].wei=tmp;
if(tmp>0)
spos+=tmp;//正体积的和
else if(tmp<0)
sneg-=tmp;//负体积的和
else
ans+=arr[i].a;//体积为0直接算贡献
}
memset(dp1,0x8f,sizeof(dp1));
memset(dp2,0x8f,sizeof(dp2));
dp1[0]=dp2[0]=0;
for(int i=1; i<=n; i++)//正
{
if(arr[i].wei<=0)
continue;
for(int j=spos; j>=arr[i].wei; j--)
dp1[j]=max(dp1[j],dp1[j-arr[i].wei]+arr[i].a);
}
for(int i=1; i<=n; i++)//负
{
if(arr[i].wei>=0)
continue;
for(int j=sneg; j>=-arr[i].wei; j--)
dp2[j]=max(dp2[j],dp2[j+arr[i].wei]+arr[i].a);
}
int rel=0;
for(int i=1; i<=min(sneg,spos); i++)//选择两个体积绝对值相等的最大值
{
if(dp1[i]>0&&dp2[i]>0)
rel=max(rel,dp1[i]+dp2[i]);
}
ans+=rel;
if(ans==0)
printf("-1\n");
else
printf("%d\n",ans);
return 0;
}

CF#214 C. Dima and Salad 01背包变形的更多相关文章

  1. CF Dima and Salad 01背包

    C. Dima and Salad time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  2. Codeforces Round #214 (Div. 2) C. Dima and Salad (背包变形)

    C. Dima and Salad time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  3. CodeForces - 366C Dima and Salad (01背包)

    题意:n件东西,有属性a和属性b.要选取若干件东西,使得\(\frac{\sum a_j}{\sum b_j} = k\).在这个条件下,问\(\sum a_j\)最大是多少. 分析:可以将其转化为0 ...

  4. FZU 2214 Knapsack problem 01背包变形

    题目链接:Knapsack problem 大意:给出T组测试数据,每组给出n个物品和最大容量w.然后依次给出n个物品的价值和体积. 问,最多能盛的物品价值和是多少? 思路:01背包变形,因为w太大, ...

  5. codeforce Gym 101102A Coins (01背包变形)

    01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...

  6. HDU 2639 Bone Collector II(01背包变形【第K大最优解】)

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. 【01背包变形】Robberies HDU 2955

    http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...

  8. Dima and Salad(完全背包)

    Dima and Salad time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  9. Codeforces 366C Dima and Salad:背包dp

    题目链接:http://codeforces.com/problemset/problem/366/C 题意: 有n个物品,每个物品有两个属性a[i]和b[i]. 给定k,让你选出一些物品,使得 ∑ ...

随机推荐

  1. 详解 方法的覆盖 —— toString() 与 equals()的覆盖

    在学习本篇博文前,建议先学习完本人的博文--<详解 继承(上)-- 工具的抽象与分层> 在本人之前的博文中曾讲过"基类"的知识,那么,本篇博文中的主题--Object类 ...

  2. 配置CORS代理请求

    参考资料: Vue-CLI 3.x 跨域问题处理 使用代理设置:见官方文档 配置代理 新建配置文件 在 package.json 文件的同级目录下创建 vue.config.js 文件,文件的格式应该 ...

  3. tensorflow1.0 构建lstm做图片分类

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #this is data mni ...

  4. Springboot整合https原来这么简单

    1 简介 HTTP是不安全的,我们需要给它套上SSL,让它变成HTTPS.本文章将用实例介绍Springboot整合HTTPS. 2 密码学基础 要谈https就要谈Security,自然就要谈安全: ...

  5. Nginx安装、多域名访问

    nginx web服务 apache iis django web框架 lvs 负载均衡 章文嵩博士 vue 尤雨溪 Tengine F5 硬件负载 A10 安装 ``` wget http://ng ...

  6. http_response_code()和header()

    1.http_response_code — 获取/设置响应的 HTTP 状态码向服务器发送成功状态码:http_response_code(200); 返回值如果提供了response_code,将 ...

  7. 虚拟化KVM之优化(三)

    KVM的优化 1.1 cpu的优化 inter的cpu的运行级别,(Ring2和Ring1暂时没什么用)Ring3为用户态,Ring0为内核态 Ring3的用户态是没有权限管理硬件的,需要切换到内核态 ...

  8. JAVA企业级应用TOMCAT实战(一)

    一. Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共 ...

  9. 在 ubuntu20 上替换原有的源,解决下载软件慢的问题

    处理方式 使用命令查看到所有的下载源 sudo gedit /etc/apt/sources.list 使用163的源替换掉原始的源 163:http://mirrors.163.com/ubuntu ...

  10. PL/SQL登录Oracle18数据库:ORA-12154:TNS无法解析指定的连接标识符

    PL/SQL登录Oracle18数据库出现ORA-12154:TNS无法解析指定的连接标识符解决以下问题:首先更改Oracle客户端的tnsnames.ora,我的路径是:D:\OracleSQL\n ...