令$f[i][j]$表示第$i$个时刻走到点$j$的最小时间,暴力的$dp$复杂度为$o(tm)$
如果没有限制,由于$w\le 5$,记录前5个时刻的状态即可求出当前状态,用矩阵乘法可优化到$o(n^{3}\log_{2}T)$
当$k\le 10$时,考虑特殊的转移只有10个位置,对于其他位置矩乘转移,这些位置特殊考虑,复杂度$o(n^{3}k\log_{2}T)$
用倍增预处理出矩阵的$2^{i}$次幂,直接用答案进行运算使一次乘法降为$o(n^{2})$,总复杂度即$o((n+k)n^2\log_{2}T)

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define ll long long
4 #define oo 1e15
5 struct mat{
6 ll a[305][305];
7 }a,o,aa,mi[31];
8 struct fe{
9 int t,k,w;
10 }b[205];
11 int n,m,t,k,x,y,z,flag,w[105];
12 ll s[305],ans[305];
13 bool cmp(fe x,fe y){
14 return x.t<y.t;
15 }
16 mat mul(mat &x,mat &y){
17 for(int i=1;i<=5*n;i++)
18 for(int j=1;j<=5*n;j++){
19 o.a[i][j]=-oo;
20 for(int k=1;k<=5*n;k++)o.a[i][j]=max(o.a[i][j],x.a[i][k]+y.a[k][j]);
21 }
22 return o;
23 }
24 void mul(mat &x){
25 memcpy(s,ans,sizeof(s));
26 for(int i=1;i<=5*n;i++){
27 ans[i]=-oo;
28 for(int j=1;j<=5*n;j++)ans[i]=max(ans[i],s[j]+x.a[j][i]);
29 }
30 }
31 void pow(int n){
32 for(int i=0;i<=30;i++)
33 if (n&(1<<i))mul(mi[i]);
34 }
35 int main(){
36 freopen("delicacy.in","r",stdin);
37 freopen("delicacy.out","w",stdout);
38 scanf("%d%d%d%d",&n,&m,&t,&k);
39 for(int i=1;i<=n;i++)scanf("%d",&w[i]);
40 for(int i=1;i<=5*n;i++)
41 for(int j=1;j<=5*n;j++)a.a[i][j]=-oo;
42 for(int i=1;i<=m;i++){
43 scanf("%d%d%d",&x,&y,&z);
44 a.a[(5-z)*n+x][4*n+y]=w[y];
45 }
46 for(int i=n+1;i<=5*n;i++)a.a[i][i-n]=0;
47 aa=a;
48 for(int i=1;i<=k;i++)scanf("%d%d%d",&b[i].t,&b[i].k,&b[i].w);
49 sort(b+1,b+k+1,cmp);
50 mi[0]=a;
51 for(int i=1;i<=30;i++)mi[i]=mul(mi[i-1],mi[i-1]);
52 for(int i=1;i<=5*n;i++)ans[i]=-oo;
53 ans[4*n+1]=0;
54 for(int i=1;i<=k;i++){
55 pow(b[i].t-b[i-1].t-1);
56 a=mi[0];
57 for(int j=1;j<=5*n;j++)a.a[j][4*n+b[i].k]+=b[i].w;
58 mul(a);
59 }
60 pow(t-b[k].t);
61 if (ans[4*n+1]<0)printf("-1\n");
62 else printf("%lld",ans[4*n+1]+w[1]);
63 return 0;
64 }

[loj3339]美食家的更多相关文章

  1. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 391[Submit][S ...

  2. [BZOJ1691][Usaco2007 Dec]挑剔的美食家

    [BZOJ1691][Usaco2007 Dec]挑剔的美食家 试题描述 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返了. ...

  3. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家( 平衡树 )

    按鲜嫩程度排个序, 从大到小处理, 用平衡树维护价值 ---------------------------------------------------------------------- #i ...

  4. BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心

    BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心 题意: 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返 ...

  5. 51nod 挑剔的美食家

    挑剔的美食家    基准时间限制:1 秒 空间限制:131072 KB 分值: 5 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一 ...

  6. Java实现 蓝桥杯VIP 算法提高 聪明的美食家

    算法提高 聪明的美食家 时间限制:1.0s 内存限制:256.0MB 问题描述 如果有人认为吃东西只需要嘴巴,那就错了. 都知道舌头有这么一个特性,"由简入奢易,由奢如简难"(据好 ...

  7. 【NOI2020】美食家(矩阵)

    Description 给定一张有向图,\(n\) 个顶点,\(m\) 条边.第 \(i\) 条边从 \(u_i\) 到 \(v_i\),走完该边的用时为 \(w_i\).每一个点有一个价值 \(c\ ...

  8. [XIN算法应用]NOI2020美食家

    XIN(\(updated 2021.6.4\)) 对于很多很多的题目,发现自己并不会之后,往往会直接冲上一个XIN队算法,然而,这样 \(\huge{\text{鲁莽}}\) 的行为只能获得 TLE ...

  9. BZOJ1691: [Usaco2007 Dec]挑剔的美食家

    传送门: 一句话题解:贪心+treap 好几天前刚学的treap,然后真到了考treap又写不出来,这么辣鸡还搞什么OI 先按$A_i$递减排序,然后把$C_i$也递减排序,然后用一个指针指向$M$序 ...

随机推荐

  1. Python | 一键生成九宫格图片

    一键生成九宫格图片 首先我们准备几张图片: 将代码文件放在放置图片的地方,用软件打开: 点击运行,在当前目录下会生成一个文件夹: 打开新生成的文件夹: 打开对应图片的名称文件夹: 如果不想图片被分成9 ...

  2. 破解安装pyhotn

    1.网址 https://www.jetbrains.com/pycharm/download/#section=windows,打开页面,点击下载专业版 2.这是下载好的文件,双击运行即可. //详 ...

  3. Python中字符串常用方法

    capitalize() String.capitalize() 将字符串首字母变为大写 name = 'xiaoming' new_name = name.capitalize() print(ne ...

  4. VMware中Linux虚拟机与Windows主机共享文件夹

    VMware下Linux虚拟机与Windows主机共享文件夹 1. 安装vm-tool 2. 开启共享文件夹 虚拟机->设置->选项->共享文件夹"右边选择"总是 ...

  5. Python常用加密解密算法

    MD5加密 简介 这是一种使用非常广泛的加密方式,不可逆的,常见16位和32位一般都是md5 实现 import hashlib data = '你好' print(hashlib.md5(data. ...

  6. Mybatis 一级缓存 (20)

    Mybatis中的一级缓存和二级缓存(本博文只是针对一级缓存说明) 概述 ORM框架一般都会有缓存机制,做为其中一员的Mybatis也存在缓存.功能是用以提升查询的效率和服务给数据库带来压力.同样的M ...

  7. 使用vue-cli+webpack搭建vue开发环境

    在这里我真的很开心,好久没有用过博客,今天突然看到了我的博客有不少人看过,虽然没有留下脚印,但是还是激起了我重新拿起博客的信心,感谢大家. 在这里我们需要首先下载node,因为我们要用到npm包下载, ...

  8. 【UE4 C++】UObject 创建、销毁、内存管理

    UObject 的创建 NewObject 模板类 本例使用 UE 4.26,只剩下 NewObject 用来创建 UObject,提供两个带不同可选参数构造函数的模板类 Outer 表示这个对象的外 ...

  9. 2020BUAA软工个人项目作业

    2020BUAA软工个人项目作业 17373010 杜博玮 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人项目作业 我在这个课程的目标是 学 ...

  10. Noip模拟30 2021.8.4

    T1 毛一琛 考场上打的稳定的$O((2^n)^2)$的暴力.其实再回忆一下上次那道用二进制枚举的题$y$ 就可以知道一样的道理,使用$\textit{Meet In the Middle}$, 按照 ...