题目描述 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. APP多渠道打包

    多渠道打包的概念: 打包是指使用证书文件对app签名生成一个apk文件. 多渠道打包指的就是我们的app在开发完成之后需要投放到不同的市场,比如说Google市场.百度市场等,为了统计应用在各个市场的 ...

  2. Android开发学习—— 消息机制

    ###主线程不能被阻塞* 在Android中,主线程被阻塞会导致应用不能刷新ui界面,不能响应用户操作,用户体验将非常差* 主线程阻塞时间过长,系统会抛出ANR异常* ANR:Application ...

  3. 开源项目:JEECG

    工程下载:https://github.com/zymqqc/jeecg-1

  4. 源代码管理SVN的使用

    SVN 全称是Subversion,集中式版本控制之王者 SVN 版本控制,需要自己搭建一个管理代码的服务器,提供开发人员,上传和下载 1.基本介绍 使用环境 要想利用SVN管理源代码,必须得有2套环 ...

  5. Windows之shortcut

    System key combinations CTRL+ESC: Open Start menu ALT+TAB: Switch between open programs ALT+F4: Quit ...

  6. linux 配置Java、Mysql、Tomcat、Redis开发环境

    1.安装四个依赖 以下四个依赖必须按顺序联网安装:yum install glibc.i686yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so ...

  7. Perl字符集[\d\D]表示任何字符(所有数字和非数字,包括换行符),“.”表示除了换行符以外的所有字符。

    Perl字符集[\d\D]表示任何字符(所有数字和非数字,包括换行符),“.”表示除了换行符以外的所有字符.

  8. pep8摘要

    https://www.python.org/dev/peps/pep-0008/ #!/usr/bin/python # -*- coding:utf- -*- # @filename: pep_s ...

  9. python 删除/查找重复项

    l = [1,2,3,2,1] # l = ['你','我','他','她','你'] for i in l: print("the %s has found %s" % (i, ...

  10. getQueryString(option)的用法

    //页面参数接收1.function getQueryString(name) { var reg = new RegExp("(^|&)" + name + " ...