创世纪

这是我的第一道原创题

题解:

这道题的核心算法是:加维度的最短路+贪心

状态:\(dis[i][j][t][a]\)表示在 \(t\) 时,到达 \((i,j)\) ,当前共造\(a\)只"rat"的最小代价(所以相比平常的状态会多出两维)

表面上看到达一个点造的"rat"数是不固定的,实际上(在 \((t>=cnt*W[i][j])\) 的情况下,cnt越多,代价就越少),所以\(cnt=t/W[i][j]\),然后相当于两个相邻位置的代价就出来了,接着跑最短路即可。

解决不可以回到上一步的问题,只需要在队列里面加上两个变量表示当前的坐标,因此更新下一次时就特判不走这两个位置。

还有,这道题跑最短路的复杂度跟n,m规模无关,只跟t有关,所以你爆搜也行。

代码:

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
const int N=105;
const int MaxT=17;
int n,m,L,T,A;
int W[N][N],f[N][N][MaxT][3*MaxT],dx[9]={0,0,1,-1,1,1,-1,-1},dy[9]={1,-1,0,0,1,-1,1,-1},inf=0x3f3f3f3f;
struct node {
int x,y,w,t,a,lx,ly;
bool operator<(const node &u) const{
return w>u.w;
}
};
bool mark[N][N][MaxT][3*MaxT];
priority_queue<node> Q;
void DJ(int sx,int sy) {
memset(f,0x3f,sizeof(f));
f[sx][sy][1][0]=0;
Q.push((node){sx,sy,W[sx][sy],1,0,0,0});
while(!Q.empty()) {
int ux=Q.top().x,uy=Q.top().y,t=Q.top().t,a=Q.top().a,lx=Q.top().lx,ly=Q.top().ly; Q.pop();
if(mark[ux][uy][t][a]||a>A) continue;
// printf("x=%d y=%d t=%d a=%d %d\n",ux,uy,t,a,f[ux][uy][t][a]);
mark[ux][uy][t][a]=true;
for(int d=0;d<4;d++) {
int vx=ux+dx[d],vy=uy+dy[d];
if(vx<1||vx>n||vy<1||vy>m||(vx==lx&&vy==ly)) continue;
t++;
int cnt=t/W[vx][vy]; //<=T最多是几倍 W[vx][vy]
if( t<=T && !mark[vx][vy][t][a+cnt] && f[vx][vy][t][a+cnt] >= f[ux][uy][t-1][a] + (t-cnt*W[vx][vy]) ) {
f[vx][vy][t][a+cnt] = f[ux][uy][t-1][a] + (t-cnt*W[vx][vy]);
Q.push((node){vx,vy,f[vx][vy][t][a+cnt],t,a+cnt,ux,uy});
}
t--;
}
}
}
int main() {
// freopen("1.out","w",stdout);
scanf("%d%d%d%d%d",&n,&m,&L,&T,&A);
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
scanf("%d",&W[i][j]);
}
}
DJ(1,1);
int ans=inf;
for(int a=A;a<=A+T;a++)
for(int t=1;t<=T;t++)
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) {
ans=min(f[i][j][t][a],ans);
// printf("!x=%d y=%d t=%d a=%d: %d\n",i,j,t,a,f[i][j][t][a]);
} if(ans==inf||ans>L) printf("Death.");
else {
printf("Yes.\n%d",ans);
}
return 0;
}

T1创世纪(原创)的更多相关文章

  1. Poetize4 创世纪

    3037: 创世纪 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 123  Solved: 66[Submit][Status] Description ...

  2. 为创世纪图书馆(Library Genesis)作镜像

    简介 Library Genesis的Wikipedia条目中的介绍是: Library Genesis or LibGen is a search engine for articles and b ...

  3. 编程哲学之C#篇:01——创世纪

    我们能否像神一样地创建一个世界? 对于创建世界而言,程序员的创作能力最接近于神--相对于导演,作家,漫画家而言,他们创建的世界(作品)一旦完成,就再也不会变化,创建的角色再也不会成长.而程序员创建的世 ...

  4. 【BZOJ3037/2068】创世纪/[Poi2004]SZP 树形DP

    [BZOJ3037]创世纪 Description applepi手里有一本书<创世纪>,里面记录了这样一个故事……上帝手中有着N 种被称作“世界元素”的东西,现在他要把它们中的一部分投放 ...

  5. [bzoj3037/2068]创世纪[Poi2004]SZP_树形dp_并查集_基环树

    创世纪 SZP bzoj-3037/2068 Poi-2004 题目大意:给你n个物品,每个物品可以且仅可以控制一个物品.问:选取一些物品,使得对于任意的一个被选取的物品来讲,都存在一个没有被选取的物 ...

  6. CH6401 创世纪

    6401 创世纪 0x60「图论」例题 描述 上帝手中有 N(N≤10^6) 种世界元素,每种元素可以限制另外1种元素,把第 i 种世界元素能够限制的那种世界元素记为 A[i].现在,上帝要把它们中的 ...

  7. 图形学创世纪——写在SIGGRAPH 40年的边上

    40年的边上" title="图形学创世纪--写在SIGGRAPH 40年的边上"> 前言: SIGGRAPH是由ACM SIGGRAPH(美国计算机协会计算机图形 ...

  8. JZOJ 3929. 【NOIP2014模拟11.6】创世纪

    3929. [NOIP2014模拟11.6]创世纪 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 上帝手 ...

  9. bzoj3037 创世纪

    两种解法: 一.树状DP /*by SilverN*/ #include<iostream> #include<algorithm> #include<cstring&g ...

随机推荐

  1. E-R图转换为关系模型

    E-R模型如何转换成关系模型,这里我们分成三种情况进行讲解,分别是一对一,一对多和多对多. 1.一对一的情况: 有两种方法解决这个问题.第一个方法:可以单独对应一个关系模式,由各实体的主码构成关系模式 ...

  2. 某空间下的令牌访问产生过程--Kubernetes Dashboard(k8s-Dashboard)

    在面试中发现,有些运维人员基本的令牌访问方式都不知道,下面介绍下令牌的产生过程 某个空间下的令牌访问产生过程(空间名称为cc) ###创建命名空间[root@vms61 ccadmin]# kubec ...

  3. 帝国cms7.5忘记登录密码以及多次登录失败被锁定终极解决办法

    其实网上很多忘记登录密码的解决方法都是相对于7.5版本以下的,在7.5的版本里根本不适用,今天小编主要给大家说的是针对帝国cms7.5忘记登录密码正确的解决办法. 前提是你能登陆服务器: 一.忘记登录 ...

  4. echarts饼图调整悬浮提示框的位置

    默认是跟随鼠标的位置 通过数组表示提示框浮层的位置,数字设置绝对位置,百分比设置相对位置. position: [10,10] //绝对位置,相对于容器左侧10px,上侧10px position: ...

  5. Angular中directive——scope选项与绑定策略,这个也经常迷惑的。

    开门见山地说,scope:{}使指令与外界隔离开来,使其模板(template)处于non-inheriting(无继承)的状态,当然除非你在其中使用了transclude嵌入,这点之后的笔记会再详细 ...

  6. python基础练习题(题目 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数)

    day12 --------------------------------------------------------------- 实例019:完数 题目 一个数如果恰好等于它的因子之和,这个 ...

  7. PHP的Laravel与Composer部署项目时常见问题

    我们在部署PHP项目时,其实大部分的PHP项目会创建环境检测与一键**Install**页面. 但是,有许多的项目还采用了Composer部署. 什么是Composer 至于什么是Composer,我 ...

  8. python学习-Day30

    目录 今日内容详细 作业讲解 设计模式 单例模式 实现思想 编写 pickle模块 今日内容详细 作业讲解 编写元类规定对象的所有数据值转大写 eg: obj.name = 'jason' print ...

  9. FreeRTOS --(13)任务管理之空闲任务

    转载自 https://blog.csdn.net/zhoutaopower/article/details/107180016 创建完毕任务,启动调度器,任务控制,系统 SysTick 来临后判断是 ...

  10. .NET混合开发解决方案10 WebView2控件调用网页JS方法

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...