神奇的玩具

Description

有 n n种玩具,一共有mm个点买这些玩具。
但每种玩具只有两份,可能在相同的店里,也可能在不同的店里,同种玩具价格也可能不同,第 i i种玩具的两个价格分别是qiq_i和 pi p_i。
现在让你选择 k k个玩具店,你只能买这kk个玩具店里的玩具,你必须把每种玩具都买一个,求最小花费。

Data Constraint

Solution

我们先从 50 50%的数据入手。
50 50%很容易只需用 O O(2m2^m)的时间复杂度不加任何剪枝就能砍下。

在上述的暴力搜索上加上一些剪枝即可过掉这一题。

由于每个礼物只有两个,如果一个不选那另一个就必须选。
那么当你不选择某个玩具店的时候,也就意味着和这个玩具店拥有这同种玩具的玩具店必须选择,这是第一个剪枝。
比赛时我只加了这个剪枝,自己出数据测了一下,事实证明这个剪枝在随机数据下表现十分优良,直接就过了(数据较水)。

其次还有两个剪枝。
首先是最优性剪枝。
当你不选某些玩具店时也就确定了买下某些玩具需要的花费,若这个必要花费已经不比答案优了,那大可不用搜索下去了。

然后就是可行性剪枝。
若在当前状态下把之后的玩具店全都选了总花费仍不比答案优,那也不用搜索下去了。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>#define fo(i,j,l) for(i=j;i<=l;i++)
#define fd(i,j,l) for(i=j;i>=l;i--)using namespace std;
typedef long long ll;
const ll maxn=1e9;
const ll M=50,N=110;
ll other[M][N],cost[M][N],shop[M][N],g[M],ok[M][N],hy[M][N];
ll past[M],jz[N];
int la[N],ne[N];
int n,m,j,k,l,i,o,a,b,c,d;
ll ans=maxn;
bool bz;ll min(ll a,ll b)
{if(a<b)return a;else return b;}void dg(int o,int sy,ll least)
{int i;if((!sy)||(o==m+1)){ll kk=0;fo(i,1,n)if(jz[i]==maxn)return; else kk+=jz[i];if(kk<ans)ans=kk;return;}bz=true;ll oo=least;fo(i,1,g[o])if((ok[o][i]==1)&&(jz[shop[o][i]]==maxn)){bz=false; break;}else oo=oo+other[o][i]*(ok[o][i]==0);if((bz)&&(oo<ans))dg(ne[o],sy,oo);fo(i,1,g[o])if(!ok[o][i])oo=oo+other[o][i];fo(i,1,g[o]){hy[o][i]=jz[shop[o][i]];if(cost[o][i]<jz[shop[o][i]])jz[shop[o][i]]=cost[o][i];}dg(ne[o],sy-1,least);fd(i,g[o],1)jz[shop[o][i]]=hy[o][i];
}int main()
{cin>>n>>m>>k;
    fo(i,1,n){        scanf("%d%d%d%d",&a,&b,&c,&d);
        shop[a][++g[a]]=i; cost[a][g[a]]=b; other[a][g[a]]=d;
        shop[c][++g[c]]=i; cost[c][g[c]]=d; other[c][g[c]]=b;
        if(a>c)ok[a][g[a]]=1;else
        if(a<c)ok[c][g[c]]=1;else {            if(!past[a])k--;
            past[a]=1;
        }
    }
    fo(i,1,n)jz[i]=maxn;
    fo(i,1,m)ne[i]=i+1,la[i]=i-1;
    ne[0]=1; la[m+1]=m;
    fo(i,1,m)
    if(past[i]){        fo(l,1,g[i])
        jz[shop[i][l]]=min(jz[shop[i][l]],cost[i][l]);
        ne[la[i]]=ne[i]; la[ne[i]]=la[i];
    }else if(!g[i]) ne[la[i]]=ne[i],la[ne[i]]=la[i];
    if(k>0){        dg(ne[0],k,0);
        if(ans==maxn)ans=-1;
    }
    else {        ans=0;
        fo(i,1,n)
        if(jz[i]!=maxn)ans+=jz[i];
        else {            ans=-1; break;
        }
        if(k<0)ans=-1;
    }
    printf("%lld",ans);
}

JZOJ 5276 神奇的玩具相关推荐

  1. 机器人日行十万步却无需动力源!究竟如何完美的机械结构让你开始怀疑人身...

    来源:机器人大讲堂 摘要:上图这个机器人可不简单,它是世界纪录的保持者,目前最新的纪录是连续步行27小时,总长72公里(相当于十万步还要多).而最最关键的是,它完全凭借自己完美的机械结构,没有任何动力 ...

  2. 与殿堂级大师隔空对话——一张纸是怎么限制了我们的想象力

    ▲   点击查看 七天假期,熊孩子在家捣乱的情况实在是太多啦,就一眨眼的功夫,满地的积木,到处都有,还有到处都是的纸张碎片,真真是十分的头疼! 在蚊子小时候,玩具远不如现在丰富,一张纸都可以让蚊子玩个 ...

  3. 以太坊五岁了,它现在还好吗?

    作者:Consensys 翻译:Quiana 据说,重大突破通常遵循以下七个步骤: 1.首先,没人听说过. 2.他们听说过你,但认为你疯了. 3.然后他们开始了解你的产品,但认为它没有机会. 4.然后 ...

  4. 创业陷阱——逐一点评301个骗你没商量的项目

    创业陷阱--逐一点评301个骗你没商量的项目 1.灵芝栽培:技术是真的.但是,骗子把收购价格提高了成千上万倍,说什么种植2平方米,年收十几万.还搞个什么回收合同,其实都是幌子. 2.冬虫夏草:技术还不 ...

  5. 【01月18日】【精彩电影合集】【10部】【亲测】【Lsyq5647发布】

    今日电影更新[10部] 1.<赎命24小时>07布鲁斯南火爆大片DVD完美中英双字 2.<贝奥武夫>07最新幻想冒险大片R5-R中字 3.<四月三周两天>07最新戛 ...

  6. 探索隐藏在冰山下的自己

    学习心理学已经两年了,学习的越深入越发现心理学的奇妙之处,在学习的时候.老师往往能通过一个动作一句话就能发现一个人未显露的一面,也能帮助更多的人走出内心的困境,敞开心扉迎接广阔的天地.这让我羡慕不已. ...

  7. 4部C4D动画短片视觉、叙事完美融合

    本期文章为你带来4部动画短片,都用到C4D制作 4部短片风格迥异 - 或可爱.或艺术.或东方...但不论画面,还是叙事都十分打动人心 4部动画短片的创作者分享了自己的制作过程.故事灵感以及更多关于创作 ...

  8. 人物-发明家-贝尔:亚历山大·贝尔

    ylbtech-人物-发明家-贝尔:亚历山大·贝尔 亚历山大·格拉汉姆·贝尔(Alexander Graham Bell,1847年3月3日-1922年8月2日),美国发明家.企业家. 他获得了世界上 ...

  9. 【02月26日】【精彩电影合集】【10部】【亲测】【Lsyq5647发布】

    1.<加百利>07最新火爆动作科幻片DVD中字 片名:加百利 导演:Shane Abbess 主演:Andy WhitfieldDwaine StevensonSamantha Noble ...

最新文章

  1. java基础国庆作业_java程序设计国庆作业
  2. Mysql数据库基础系列(二):表结构、键值
  3. Linux下常用的压缩与解压命令
  4. zcmu1156: 新年彩灯Ⅰ
  5. Android高效加载大图、多图解决方案_LruCache,有效避免程序OOM
  6. 提升Azure App Service的几个建议
  7. php访问js文件不存在,php文件里js不能被执行
  8. memcache 防火墙策略
  9. 什么是 Python 自省?
  10. ssh整合步骤之一(搭建环境)
  11. Redis 缓存过期(maxmemory) 配置/算法 详解
  12. 50Hz工频干扰消除
  13. 1、position用法技巧,2、CSS 属性 选择器,3、CSS 选择器
  14. JAVA对象转Json对象
  15. C# For Koyo PLC Serial Port Communication Library,C# 与光洋PLC通讯库,光洋PLC通讯,PLC通讯,光洋
  16. 《我想吃掉你的胰脏》观后感
  17. 交换机端口mtu值最大_中低端交换机修改三层接口MTU值的说明
  18. CF18B/01背包
  19. STM32-增量式旋转编码器测量
  20. 看了就会的浏览器帧原理

热门文章

  1. HTML编程出现乱码,html中文为什么会乱码?html中文乱码怎么解决?
  2. Cassandra 集群核心配置和概梳理
  3. 【CSPNet 解读】一种增强CNN学习能力的新型骨干网络
  4. fresh air 项目记录2
  5. Python 随机生成 范围内 经纬度 坐标信息
  6. 南陵中学2021高考成绩查询,南陵中学2020年高考快讯(一)
  7. [七尚童装]淘宝装修的背景图片问题
  8. 用自家的网络搭建属于自己的服务器
  9. 阿里巴巴中间件开源项目盘点(持续更新)
  10. OSChina 周一乱弹 ——新娘着火,拿红酒灭火的肯定是新郎前女友