题目链接:http://codeforces.com/problemset/problem/366/C

题意:

  有n个物品,每个物品有两个属性a[i]和b[i]。

  给定k,让你选出一些物品,使得 ∑ a[i] / ∑ b[i] = k。

  问你选出物品的 ∑ a[i]最大是多少。

题解:

  将原式变形:

    ∑ a[i] - k * ∑ b[i] = 0

  可以看做有一个容积为0的箱子,每个物品的价值为a[i],体积为a[i] - k*b[i],问你最大总价值。

  这就变成了01背包。

  但是体积a[i] - k*b[i]有可能为负值。

  所以将体积为正的分一堆,体积为负的分到另一堆。

  体积取绝对值,分别跑一遍01背包求出pos数组和neg数组。

  pos[i]和neg[i]分别表示用了i的体积,此时的最大总价值。

  然后统计答案。

  枚举花费体积i,正负相互抵消:ans = max(pos[i] + neg[i])

  当ans = 0时说明啥都没选,输出-1。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 105
#define MAX_C 100005 using namespace std; int n,k;
int a[MAX_N];
int b[MAX_N];
int pos[MAX_C];
int neg[MAX_C]; void read()
{
cin>>n>>k;
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=n;i++) cin>>b[i];
} void work()
{
memset(pos,0xc0,sizeof(pos));
memset(neg,0xc0,sizeof(neg));
pos[]=neg[]=;
for(int i=;i<=n;i++)
{
int c=a[i]-k*b[i];
if(c>=)
{
for(int j=MAX_C-;j>=c;j--)
{
pos[j]=max(pos[j],pos[j-c]+a[i]);
}
}
else
{
c=-c;
for(int j=MAX_C-;j>=c;j--)
{
neg[j]=max(neg[j],neg[j-c]+a[i]);
}
}
}
int ans=;
for(int i=;i<MAX_C;i++)
{
ans=max(ans,pos[i]+neg[i]);
}
if(ans) cout<<ans<<endl;
else cout<<-<<endl;
} int main()
{
read();
work();
}

Codeforces 366C Dima and Salad:背包dp的更多相关文章

  1. codeforces 366C Dima and Salad 【限制性01背包】

    <题目链接> 题目大意: 在一个水果篮里有n种水果,并且这些水果每一种都有一个美味度和一个卡路里的属性, 小明要从这些水果中选出来一些做一个水果沙拉, 并且要求他的水果沙拉的美味度是卡路里 ...

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

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

  3. Codeforces 366C Dima and Salad

    http://codeforces.com/problemset/problem/366/C 题意:在一个冰箱里有n种水果,并且这些水果每一种都有一个美味度和一个卡路里的属性, 小明要从这些水果中选出 ...

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

    C. Dima and Salad   Dima, Inna and Seryozha have gathered in a room. That's right, someone's got to ...

  5. Codeforces 730J:Bottles(背包dp)

    http://codeforces.com/problemset/problem/730/J 题意:有n个瓶子,每个瓶子有一个当前里面的水量,还有一个瓶子容量,问要把所有的当前水量放到尽量少的瓶子里至 ...

  6. Codefroces 366 C Dima and Salad(dp)

    Dima and Salad 题意:一共有n种水果,每种水果都有一个ai, bi,现求一个最大的ai总和,使得ai之和/对应的bi之和的值等于K. 题解:将bi转换成偏移量,只要偏移到起点位置,就代表 ...

  7. Codeforces 922 E Birds (背包dp)被define坑了的一题

    网页链接:点击打开链接 Apart from plush toys, Imp is a huge fan of little yellow birds! To summon birds, Imp ne ...

  8. C. Dima and Salad 背包好题

    http://codeforces.com/contest/366/problem/C 在n个物品中选出若干个,使得sum(a[i]) = k * sum(b[i]) 把问题转化一下就是,求sum(a ...

  9. codeforces 148E Aragorn's Story 背包DP

    Aragorn's Story Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/probl ...

随机推荐

  1. 在iOS中实现sticky header

    经常在网页中看到这样一种效果,当页面滚动一段距离后,页面中的某个部分固定在一个区域(通常是头部导航),这种效果一般称为Sticky Header,如下图所示: 上述操作在Android系统中非常好实现 ...

  2. listView的异步加载数据

    1 public class MainActivity extends Activity { 2 3 private ListView listView; 4 private ArrayList< ...

  3. Problem A. Dynamic Grid

    Problem We have a grid with R rows and C columns in which every entry is either 0 or 1. We are going ...

  4. centos7.2 开发 部署 .net core

    1.centos7.2 安装 nginx官方文档:http://nginx.org/en/linux_packages.html#mainline 创建nginx.repo 文件 Pre-Built ...

  5. px与与rem vw的区别

    1.px 使用具体像素点为单位,好处是比较稳定和精确,但在浏览器放大缩小会出现问题 2.rem 参考根元素的值 例如设置根元素字体大小是20像素 在h1中设置字体大小 那么H1的大小就是40px p的 ...

  6. python学习 01 变量

    1.变量不是‘盒子’. 1.1 不同的值,变量名没变,   变量地址也会变. 1.2 相同的值,不同的变量名,变量地址是相同的

  7. git 入门二 (基础)

     1.创建新仓库      git init    touch  test.txt  git add --a  git commit -m "fist commit"    初始化 ...

  8. [转]Unity Shader 学习总结

    1.先来一段单张纹理贴图的shader示例代码: // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClip ...

  9. 一般处理程序页ashx 序列化 Json数组

    json传递数组到一般处理程序页,序列化为实体类的方法,可以解决.ENT framework 3.5以前的项目, 3.5以后的项目可以用System.ServiceModel.Web和System.R ...

  10. js实现table内 某列的内容进行即时筛选

    往往有些时候,我们把数据从数据库读取出来,显示到table里面,而此时来了个新需求,要在一个搜索框内输入关键字,表格的内容进行即时的筛选. 而即时触发进行数据库的查询,再回调显示,就显得慢,拖累服务器 ...