题目描述 Description

神犇YJQ有n个不同的妹子和m种食物,每一天每一种食物只供应一个妹子吃的份量。在接下来的t天内,YJQ准备包养所有的妹子。 对于每个妹子,她在t天内都只会吃某些特定的食物,并且总共有q种特殊要求,每种要求是在Ti天Ai号妹子会由于特殊原因不能吃第Fi种食物。 有些时候,为了满足妹子的要求,必须改变所有妹子的喂食方案。在每一天重新分配食物会有不同的代价,YJQ不愿意付那么多钱,所以他希望改变妹子喂食方案的代价尽量少。 现在,YJQ拜托你给他的妹子制定食物分配计划,他希望在保证每个妹子每天都有食物吃的前提下,使得改变分配方案付出的代价尽量少。请求出这个最少代价。 如果YJQ无论怎么分配都无法在天内包养所有妹子(包养所有妹子即是使所有妹子在∀i(1<=i<=t)天都有食物),请输出“-1”。

注:第一天初始分配食物并不需要花费

输入描述 Input Description

第一行4个整数n,m,t,q表示YJQ的妹子个数,食物种类数,天数,和特殊要求数; 接下来一行有t个整数表示每一天修改食物方案的代价; 接下来n行,每行m个数,第i行第j列表示第i个妹子是否可以吃第j种食物(1表示可以,0表示不行); 接下来q行,每行3个整数Ti,Ai,Fi表示第Ti天Ai号妹子不能吃食物Fi

输出描述 Output Description

一个整数表示YJQ的最小花费,如果无论如何都不能包养所有妹子,输出-1

样例输入 Sample Input

3 3 3 2 2 3 3 1 1 0 0 1 1 1 0 1 1 1 1 2 2 3

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

对于30%的数据,n,m,t,q<4 ;

对于50%的数据,t<20 ;

对于100%的数据,n,m<100,t<500,q<10^4,所有给出的数据都是非负整数(友情提示,YJQ可能没有妹子)

对于每个i 向后找最远的j 满足i~j天数中的不能满足的边都删掉后做二分图匹配,可以全部点都匹配 记r[i]=j

且r[i]具有单调性,一定>=r[i-]+

如果r[i]=i不能满足 就无解

r[i]=j即,在i天更换方案后,到j天都不用再更换,

最后做dp得解(PS.第1天的代价为0

#include <cstdio><o:p></o:p>

#include <algorithm><o:p></o:p>

#define N 505<o:p></o:p>

const int INF=;<o:p></o:p>

struct fff{int t,a,f;}s[N*N];<o:p></o:p>

int n,m,d,qe;<o:p></o:p>

int c[N],f[N][N],vis[N],p[N],q[N][N],l[N],r[N],k[N],fir[N];<o:p></o:p>

bool cmp(const fff&x,const fff&y){return x.t<y.t;}<o:p></o:p>

int min(int x,int y){return x>y?y:x;}<o:p></o:p>

int <st1:place w:st="on"><st1:city w:st="on">gary</st1:city></st1:place>(int x)<o:p></o:p>

{<o:p></o:p>

       for(int i=;i<=m;i++)<o:p></o:p>

       if(f[x][i]>&&!vis[i]){<o:p></o:p>

              vis[i]=;<o:p></o:p>

              if(!p[i]||gary(p[i])){<o:p></o:p>

                     p[i]=x;<o:p></o:p>

                     return ;<o:p></o:p>

              }<o:p></o:p>

       }<o:p></o:p>

       return ;<o:p></o:p>

}<o:p></o:p>

int main()<o:p></o:p>

{

       scanf("%d%d%d%d",&n,&m,&d,&qe);<o:p></o:p>

       if(n==){printf("");return ;}<o:p></o:p>

       int le,i,j,h,t,ans;<o:p></o:p>

       for(i=;i<=d;i++)scanf("%d",&c[i]);<o:p></o:p>

       for(i=;i<=n;i++)<o:p></o:p>

              for(j=;j<=m;j++)scanf("%d",&f[i][j]);<o:p></o:p>

       for(i=;i<=qe;i++)scanf("%d%d%d",&s[i].t,&s[i].a,&s[i].f);<o:p></o:p>

       std::sort(s+,s++qe,cmp);<o:p></o:p>

       for(i=;i<=qe;i++)<o:p></o:p>

              if(s[i].t!=s[i-].t)fir[s[i].t]=i;<o:p></o:p>

       for(h=,le=;h<=d;h++){                    <o:p></o:p>

                     if(r[h-]==d){for(i=h;i<=d;i++)q[h][d]=;r[h]=d;continue;       }<o:p></o:p>

                     for(t=r[h-]+;;t++){<o:p></o:p>

                            if(t>d){t--;break;}<o:p></o:p>

                            for(i=fir[t];i&&i<=qe&&s[i].t==t;i++)f[s[i].a][s[i].f]--;//删边<o:p></o:p>

                            for(i=;i<=m;i++)p[i]=;<o:p></o:p>

                            for(i=,ans=;i<=n;i++){<o:p></o:p>

                                   for(j=;j<=m;j++)vis[j]=;<o:p></o:p>

                                   ans+=gary(i);<o:p></o:p>

                            }<o:p></o:p>

                            if(ans<n){<o:p></o:p>

                                   for(i=fir[t];i&&s[i].t==t&&i<=qe;i++)f[s[i].a][s[i].f]++;t--;break;}//复原图<o:p></o:p>

                     }<o:p></o:p>

                     if(t<h){printf("-1");return ;}<o:p></o:p>

                     for(i=h;i<=t;i++)q[h][i]=;r[h]=t;<o:p></o:p>

                     for(i=fir[h];i&&s[i].t==h&&i<=qe;i++)f[s[i].a][s[i].f]++;// 复原图<o:p></o:p>

       }<o:p></o:p>

       for(i=;i<=d;i++){l[i]=INF;q[i][i]=;}<o:p></o:p>

       c[]=l[]=;   <o:p></o:p>

       for(i=;i<=d;i++)<o:p></o:p>

       for(j=i;j<=d;j++)<o:p></o:p>

       if(q[i][j])l[j]=min(l[j],l[i-]+c[i]);<o:p></o:p>

       printf("%d",l[d]);<o:p></o:p>

       return ;<o:p></o:p>

}

codevs4439 YJQ Requires Food的更多相关文章

  1. Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead的解决办法

    今天在导入工程进Eclipse的时候竟然出错了,控制台输出的是: [2013-02-04 22:17:13 - takepicture] Android requires compiler compl ...

  2. Full exploitation of a cluster hardware configuration requires some enhancements to a single-system operating system.

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION Operating System Desi ...

  3. Error: Bootstrap's JavaScript requires jQuery错误

    引入bootstrap时会出现的问题:boostrap下拉菜单无效,浏览器报Uncaught Error: Bootstrap's JavaScript requires jQuery错误, 解决办法 ...

  4. SIP模块版本错误问题:the sip module implements API v??? but XXX module requires API v???

    系统安装了python 2.7,继续安装PyQt4,于是依次下载sip.pyqt4源码进行安装.用以下代码测试: import PyQt4.QtGui 显示出错.错误信息:the sip module ...

  5. Solving “Dynamic Web Module 3.0 requires Java 1.6 or newer” in Maven Projects

    不一定是在Maven Projects里才有这种情况,但解决方法是一样的. 转自:http://qussay.com/2013/09/13/solving-dynamic-web-module-3-0 ...

  6. 升级到macos sierra xcode8 requires additional components to support runing and debugging choose Install to add required components

    升级到macos sierra xcode8 报提示:requires additional components to support runing and debugging choose Ins ...

  7. Call requires API level 21(Current min is 16)

    Call requires API level 21(Current min is 16) Android开发中,遇到类似这种问题,如何处理? 一种办法是提升sdk最低版本到21,在Android s ...

  8. Android开发学习---template requires a minimum SDK version of at least 7,build target API version of 14

    adt 22.6.3的bug 当adt更新到22.6.3,其编辑器中最低支持api7,即android 2.1,这里可能是google故意这么做的,也可能是其bug.其target sdk 和comp ...

  9. Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead. Please use Android Tools>Fix project Properties.

    重装操作系统之后,或者破坏了Android的开发环境之后,需要重新配置好Android的开发环境.但是配置好后,导入原有的项目时,报错: Android requires compiler compl ...

随机推荐

  1. ECMAScript6之箭头函数

    2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015. 函数作为js语言中的一等公民.自然Es6中推出的箭头函数(=>)也是备受瞩目的.那我们接下来看下传 ...

  2. Compiler 1.6.5 —1.6.7

    Compiler  1.6.5 —1.6.7 Dynamic Scope Technically, any scoping policy is dynamic if it is based on fa ...

  3. Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文 下一篇:Farseer.net轻量级ORM开源框 ...

  4. 仿陌陌的ios客户端+服务端源码

    软件功能:模仿陌陌客户端,功能很相似,注册.登陆.上传照片.浏览照片.浏览查找附近会员.关注.取消关注.聊天.语音和文字聊天,还有拼车和搭车的功能,支持微博分享和查找好友. 后台是php+mysql, ...

  5. matlab化简符号表达式

    化简符号表达式计算机毕竟还是挺笨的, 经过一系列的符号计算后, 得到的结果可能只有它自己才能看懂, Matlab提供大量函数以用于符号表达式的化简. collect(f): 函数用途是合并多项式中相同 ...

  6. org.springframework.orm.hibernate4.support.OpenSessionInterceptor

    /* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Vers ...

  7. 迅为工业级arm开发板i.MX6DL开发板软件硬件全开源

    i.MX6是基于ARM Cortex™-A9架构的高扩展性多核系列应用处理器,促进了如高稳定性工业平板电脑.差异化智能本.前装车载中控系统和超高清电子书阅读器等新一代应用的发展.强劲的3D图形加速引擎 ...

  8. (转)Spring使用AspectJ进行AOP的开发:注解方式

    http://blog.csdn.net/yerenyuan_pku/article/details/69790950 Spring使用AspectJ进行AOP的开发:注解方式 之前我已讲过Sprin ...

  9. 2019年,Linux运维行业的趋势,跟不上学习就被淘汰

    运维行业经历了多年的发展,已经有了很大的变化,最开始的机房.网线.人肉,到现在一步步的自动化.智能化.容器化,运维人员的职业技能要求越来越高,稍不注意就可能被淘汰. 今天马小哥就来盘点一下2019年运 ...

  10. 微信小程序------微信支付模块

    最近项目涉及到小程序开发:需要进行微信支付模块,接下来通过叙述,记录一下微信小程序中微信支付模块的开发,以便日后翻阅和使用. 学习指南----------微信支付开发文档:https://pay.we ...