题目描述 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. jmeter(三)参数传递

    [一]参数化 录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统. 这个时候就需要对用户名和密码进行参数化,使每个虚拟用户都使用不 ...

  2. 平板&Safari 开发tips

    css: *{ margin: 0; padding: 0;  /* 禁止用户点选网页内容 */ -webkit-touch-callout:none; -webkit-user-select:non ...

  3. SSH---整合Struts2&Spring&Hibernate(实例)

    一.SSH回顾 Struts2:核心为过滤器+拦截器.过程:Filter--->FilterDispatcher-->ActionMapper-->ActionProxy--> ...

  4. ViewPager讲解以及ViewFlipper

    1.加入ViewPager最好导入<android.support.v4.view.ViewPager>兼容低版本 2.将布局转换为View的方法 3.适配器类型 PagerAdapter ...

  5. 短视频SDK在广电系统的解决方案

    锐动视频编辑SDK集手机视频拍摄和视频剪辑主要功能于一体,同时包含手机端视频配音配乐,字幕特效,滤镜,转场特效等各种功能,全方位满足开发者的需求,并可以快速植入到APP中. 手机端的摄像头录制和直播功 ...

  6. jsp 页面获取当前路径

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  7. web调用手机相册,并实现动态增加图片功能

    注:经测试h5调用相册效果有兼容性问题,安卓仅能调用拍照功能(部分安卓可能会调不起来,所以建议用app原生调用),ios可调起拍照和相册功能. <html xmlns="http:// ...

  8. ECharts Map 属性详解

    $(function() { // 路径配置 require.config({ paths : { // echarts: 'http://echarts.baidu.com/build/dist' ...

  9. Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文

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

  10. vue2.0 vue.set()

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...