红字差评系列3.abcd
【题目分析】
首先,这个e[i]是在a[i]~b[i]的,而且要{c[i]*e[i]}为0,{d[i]*e[i]}最大。
我们把a[i]~b[i]这个区间向左平移a[i]个单位,于是这个区间就变成了0~b[i]-a[i],假设b1[i]=b[i]-a[i],此时的e1[i]=e[i]-a[i](也就是比原来的数字小了a[i])(这里为了区分,都把平移后的数组用1标记一下QAQ)。
这样问题就变成了一个多重背包的问题。有n中物品,每一种物品有e1[i](0~b1[i])个,c[i]为该种物品的体积,d[i]为该种物品的价值,背包的总容量为-{c[i]*a[i]}(因为∑c[i]*e[i]=0,e1[i]=e[i]-a[i],所以有∑c[i]*(e1[i]+a[i])=0——> ∑c[i]*e1[i]+∑c[i]*a[i]=0——>∑c[i]*e1[i]=-∑c[i]*a[i])。要求最大的背包价值∑d[i]*e[i]也就是∑d[i]*e1[i]+∑d[i]+a[i]。
然后这个∑c[i]*a[i]是可以在读入时候处理出来的,前面-∑c[i]*a[i]也一样。
就...没了。
歇歇峰峰的。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=;
int n,m,a[maxn],b[maxn],c[maxn],d[maxn];
int tiji[maxn],jiazhi[maxn],ans,num;
int f[maxn];
int read()
{
int x=,f=;
char ch=getchar();
while(ch<''||ch>'')if(ch=='-')f=-,ch=getchar();
while(ch<=''&&ch>='') x=x*+ch-'',ch=getchar();
return x*f;
}
void Pre(int tj,int jz,int gs)
{
for(int i=;i<=gs;i*=)
gs-=i,tiji[++num]=tj*i,jiazhi[num]=jz*i;
if(gs) tiji[++num]=gs*tj,jiazhi[num]=jz*gs;
}
int main()
{
freopen("abcd.in","r",stdin);
freopen("abcd.out","w",stdout);
n=read();
for(int i=;i<=n;i++)
{
a[i]=read();b[i]=read();
c[i]=read();d[i]=read();
b[i]-=a[i];
m-=c[i]*a[i];
ans+=a[i]*d[i];
}
for(int i=;i<=n;i++)
Pre(c[i],d[i],b[i]);
memset(f,-0x3f,sizeof f);
f[]=;
for(int i=;i<=num;i++)
for(int j=m;j>=tiji[i];j--)
f[j]=max(f[j],f[j-tiji[i]]+jiazhi[i]);
cout<<ans+f[m];
return ;
} /*
10
1 10 1 0
-10 10 2 2
-10 10 2 2
-10 10 2 2
1 10 1 0
-10 10 2 2
-10 10 2 2
1 10 1 0
-10 10 2 2
1 10 1 0
*/
红字差评系列3.abcd的更多相关文章
- 红字差评系列2.dwarf
[题目分析] 首先按照题目给出的样例想到只要每个物品的价格都用能够合成他的两个物品来更新,一边读入一边更新就好了,后来又发现如果出现这样的情况:1 2 3在2 5 6 的前面,那我们就需要先更新2在更 ...
- 红字差评系列1.第K小数
[题目分析] 二分答案?smg,我太弱了 //不开longlong wa到挺了 #include <cstdio> #include <cstring> #include &l ...
- 餐厅随评系列之四:Umu日本料理(米其林二星)
文章目录 在过去的几个月,工作和生活都极其忙碌,因此博客短暂停更了一阵子.慢慢积累下了很多素材,从近期开始恢复博客更新,不过很多内容估计得靠回忆了. 索性采取"倒叙"的方法,先从最 ...
- 亚马逊(Review、Feedback)差评怎么处理?
移除亚马逊Review差评,我看也就这三招靠谱点! 亚马逊特别重视review,差评会直接影响到listing的浏览量和销量,甚至还可以摧毁一个账号.遇到一个差的review怎么办?网上看到很多讲移除 ...
- PowerShell 解决红字一闪而过问题
起因 起初只想在 win7上实现 pause 效果而已 cmd /c pause | out-null 结果只能看到红字一闪而过 打开 PowerShell ISE 进行调试 这次清楚的看到红字提示 ...
- ORACLE分区表梳理系列(二)- 分区表日常维护及注意事项(红字需要留意)
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- 微软本月将推Win10 望打破Win8所带来差评影响
系统妈 据香港“文汇报”7月15日报道,美国电脑巨擘微软13日宣布,新视窗系统10(Windows 10)将于7月29日推出.微软高层迈赫迪在网志表示,届时全球将有13个城市举办特别活动,表扬参与Wi ...
- 【转】C数据存储(包括const存储在哪,C++不同部分我在文中用红字已指出)
非原创(文中红字为自己见解,如有不对,请大神指点) 程序由指令和数据组成,C语言程序亦是如此.开发者在编写程序的时候往往需要根据不同数据的特点以及程序需求来选择不同的数据存储方式,那么在C语言中数据的 ...
- 解决Cydia出现红字提示“Sub-process/usr/bin/dpkg returned an error code(2)
进入此路径/var/lib/dpkg/,修改红框中的文件名,依次修改为:"available" 重新命名为 "available-bak":"stat ...
随机推荐
- Jedis工具类
1.RedisCache.java package cn.itcast.mybatis.dao; import java.util.Date;import java.util.HashMap;impo ...
- Android课程---环境配置很重要
- Unity学习疑问记录之时间变量
1.Time.deltaTime 以秒计算,完成最后一帧的时间 放在Update()函数中的代码是以帧来执行的.如果我们需要物体的移动以秒来执行.我们需要将物体移动的值乘以Time.deltaTime ...
- 安装Arch Linux
参考自:https://wiki.archlinux.org/index.php/Main_Page_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 用fdisk建立分区 ...
- P1073 最优贸易
#include <bits/stdc++.h> using namespace std; const int maxn = 100005; int head1[maxn], head2[ ...
- java取整和java四舍五入方法 BigDecimal.setScale()方法详解
import java.math.BigDecimal; public class TestGetInt { public static void main(String[] args) { doub ...
- toggle函数
$(function() { $('.love').toggle(function() { $(this).attr("src", "images/loved.png&q ...
- Java提高篇——equals()方法和“==”运算符
equals() 超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等.该方法的源码如下: public boolean equals(Object obj) { retu ...
- Java提高篇——Java实现多重继承
多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...
- 将编码从GB2312转成UTF-8的方法汇总(从前台、程序、数据库)
这篇文章主要介绍了将编码从GB2312转成UTF-8的方法汇总(从前台.程序.数据库),需要的朋友可以参考下 一个网站如果需要国际化,就需要将编码从GB2312转成UTF-8,其中有很多的问题需要注意 ...