CF#214 C. Dima and Salad 01背包变形
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背包变形的更多相关文章
- CF Dima and Salad 01背包
C. Dima and Salad time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- 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 ...
- CodeForces - 366C Dima and Salad (01背包)
题意:n件东西,有属性a和属性b.要选取若干件东西,使得\(\frac{\sum a_j}{\sum b_j} = k\).在这个条件下,问\(\sum a_j\)最大是多少. 分析:可以将其转化为0 ...
- FZU 2214 Knapsack problem 01背包变形
题目链接:Knapsack problem 大意:给出T组测试数据,每组给出n个物品和最大容量w.然后依次给出n个物品的价值和体积. 问,最多能盛的物品价值和是多少? 思路:01背包变形,因为w太大, ...
- codeforce Gym 101102A Coins (01背包变形)
01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 【01背包变形】Robberies HDU 2955
http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...
- Dima and Salad(完全背包)
Dima and Salad time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Codeforces 366C Dima and Salad:背包dp
题目链接:http://codeforces.com/problemset/problem/366/C 题意: 有n个物品,每个物品有两个属性a[i]和b[i]. 给定k,让你选出一些物品,使得 ∑ ...
随机推荐
- I NEED A OFFER! HDU - 1203
概率+0 1背包 要算成功的最大概率,那就是失败的最小概率,所以01背包直接让失败的概率最小就行了. 注意: 概率与概率之间是要相乘的,不是相加. #include<bits/stdc++.h& ...
- Servlet 和 Servlet容器
Servlet 很多同学可能跟我一样始终没有搞清楚到底什么是 Servlet,什么是 Servlet 容器.网上看了很多帖子,或许人家说的很清楚,但是自己的那个弯弯就是拐不过来. 想了很久说一下自己的 ...
- Maven+JSP+SSM+Mysql+C3P0实现的学生管理系统
项目简介 项目来源于:https://gitee.com/wu_yun_long/student_management_system 本系统是基于Maven+JSP+SSM+Mysql+C3P0实现的 ...
- linux下五种查找命令
我们经常需要在系统中查找一个文件或者命令,那么在Linux系统中如何快速定位和精确查找它呢?下面总结了五个基础命令·分别是which.whereis.type.locate.find. 一 whi ...
- 异常处理方式一(try-catch-finally)
package com.yhqtv.demo01Exception; /* * 一.异常的处理,抓抛模型 * * 过程一:“抛”:程序在正常 执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异 ...
- xhprof windows下安装和使用(转载)
1.使用5.3.3以上的php版本,或者直接下载wamp2.1集成环境. 2.下载xhprof for windows版本,地址:http://www.benjamin-carl.de/?downlo ...
- Python flask 构建可扩展的restful ap
Flask-RESTful是flask的扩展,增加了对快速构建REST API的支持. Flask-RESTful通过最少的设置鼓励最佳的实践. pip install flask-restfulFl ...
- thinkphp--多个id查询
$feedback_list = $feedback -> where( array("member_id"=>array("in", " ...
- C51_PID 水温控制系统
C51_PID 水温控制系统 51CPIDUART水温控制 前言 通过C语言程序写入51单片机实现水的温度的采集,并通过控制器控制加热器给水体加热,对水体的温进行PID控制,保证温度在设定值范围内波动 ...
- 在Spring Boot中加载初始化数据
文章目录 依赖条件 data.sql文件 schema.sql 文件 @sql注解 @SqlConfig 注解 在Spring Boot中加载初始化数据 在Spring Boot中,Spring Bo ...