codevs4439 YJQ Requires Food
神犇YJQ有n个不同的妹子和m种食物,每一天每一种食物只供应一个妹子吃的份量。在接下来的t天内,YJQ准备包养所有的妹子。 对于每个妹子,她在t天内都只会吃某些特定的食物,并且总共有q种特殊要求,每种要求是在Ti天Ai号妹子会由于特殊原因不能吃第Fi种食物。 有些时候,为了满足妹子的要求,必须改变所有妹子的喂食方案。在每一天重新分配食物会有不同的代价,YJQ不愿意付那么多钱,所以他希望改变妹子喂食方案的代价尽量少。 现在,YJQ拜托你给他的妹子制定食物分配计划,他希望在保证每个妹子每天都有食物吃的前提下,使得改变分配方案付出的代价尽量少。请求出这个最少代价。 如果YJQ无论怎么分配都无法在天内包养所有妹子(包养所有妹子即是使所有妹子在∀i(1<=i<=t)天都有食物),请输出“-1”。
注:第一天初始分配食物并不需要花费
第一行4个整数n,m,t,q表示YJQ的妹子个数,食物种类数,天数,和特殊要求数; 接下来一行有t个整数表示每一天修改食物方案的代价; 接下来n行,每行m个数,第i行第j列表示第i个妹子是否可以吃第j种食物(1表示可以,0表示不行); 接下来q行,每行3个整数Ti,Ai,Fi表示第Ti天Ai号妹子不能吃食物Fi
一个整数表示YJQ的最小花费,如果无论如何都不能包养所有妹子,输出-1
3 3 3 2 2 3 3 1 1 0 0 1 1 1 0 1 1 1 1 2 2 3
3
对于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的更多相关文章
- 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 ...
- 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 ...
- Error: Bootstrap's JavaScript requires jQuery错误
引入bootstrap时会出现的问题:boostrap下拉菜单无效,浏览器报Uncaught Error: Bootstrap's JavaScript requires jQuery错误, 解决办法 ...
- 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 ...
- 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 ...
- 升级到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 ...
- Call requires API level 21(Current min is 16)
Call requires API level 21(Current min is 16) Android开发中,遇到类似这种问题,如何处理? 一种办法是提升sdk最低版本到21,在Android s ...
- 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 ...
- 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 ...
随机推荐
- JSP页面自动刷新
1.页面自动刷新:把如下代码加入<head>区域中<meta http-equiv="refresh" content="20">,其中 ...
- 2017广东工业大学程序设计竞赛决赛 H tmk买礼物
题意: Description 今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下. TMK进入了雪梨超市,然后刚踏入的一瞬间,店主就对TMK说:“恭喜你成为了本店第21 ...
- css标签及属性
css标签及属性 HTML引入CSS的方法 1.嵌入式 <style type = “text/css”>要写的样式</style> 2.外联式 <link rel ...
- flex弹性布局操练2
上一个是练习的1个内元素的,这次练习两个元素的. ul.box1 { list-style:none; background-color:black; display:flex; justify-co ...
- mac系统 usr/ 目录下无法新建文件夹???
这个问题是在操作mongodb的时候遇到的,很苦恼.目前已经解决,将解决方法分享给各位遇到同样问题的你们. 1.重启电脑,开始关机就立马按住command+R,进入macOS恢复功能界面,进入的时间可 ...
- Spark学习之Spark调优与调试(7)
Spark学习之Spark调优与调试(7) 1. 对Spark进行调优与调试通常需要修改Spark应用运行时配置的选项. 当创建一个SparkContext时就会创建一个SparkConf实例. 2. ...
- spark性能优化(包括优化原理及基本方法)
https://www.jianshu.com/p/b8841a8925fb spark性能优化 1.诊断内存的消耗 2. 高性能序列化类库 3. 优化数据结构 4. 对多次使用的rdd进行持久化或者 ...
- 【分享】4412开发板POP烧写ubuntu出错,如何挂载emmc分区解决方法
本文转自:http://bbs.topeetboard.com 平台:4412精英版系统:ubuntu系统 按照教程烧写ubuntu文件系统,TF卡和EMMC分区都完成(总之之前的操作试了几遍都是没问 ...
- Laravel 的 API 认证系统 Passport 三部曲(二、passport的具体使用)
GQ1994 关注 2018.04.20 09:31 字数 1152 阅读 1316评论 0喜欢 1 参考链接 Laravel 的 API 认证系统 Passport 三部曲(一.passport安装 ...
- Flutter走过的坑(持续更新)
1 Target of URI doesn't exist 'package:flutter/material.dart' 官方下载的flutter中有一个example文件夹,里面有很多flutte ...