题目描述

wlswls在玩一个游戏。

wlswls有一个nn行mm列的棋盘,对于第ii行第jj列的格子,每过T[i][j]T[i][j]秒会在上面出现一个糖果,第一次糖果出现在第T[i][j]T[i][j]秒,糖果仅会在出现的那一秒存在,下一秒就会消失。

假如wlswls第kk秒在第ii行第jj列的格子上,满足T[i][j] | kT[i][j]∣k,则wlswls会得到一个糖果。

假如当前wlswls在第ii行第jj列的格子上,那么下一秒他可以选择往上下左右走一格或停在原地。

现在请问wlswls从指定的SS出发到达指定的TT,并且在路上得到至少CC个糖果最少需要多少时间?

wlswls在SS的初始时间为第00秒。

 
 

输入描述

第一行三个整数nn,mm,CC。

接下来nn行,每行m个整数T[i][j]T[i][j]。

接下来四个整数xsxs, ysys, xtxt, ytyt,其中(xs, ys)(xs,ys)表示SS,(xt, yt)(xt,yt)表示tt。

1 \leq n, m, T[i][j] \leq 101≤n,m,T[i][j]≤10

1 \leq C \leq 10181≤C≤1018

1 \leq xs, xt \leq n1≤xs,xt≤n

1 \leq ys, yt \leq m1≤ys,yt≤m

输出描述

一行一个整数表示答案。

样例输入 1

1 3 2
1 2 3
1 1 1 3

样例输出 1

3

思路:
定义状态 dp[i][j][t] 表示在t秒时 i,j位置最多可以获得的豆豆数量,
显然有以下的状态转移:
dp[i][j][t] = max(dp[i][j][t],dp[i-1][j][t-1]);
dp[i][j][t] = max(dp[i][j][t],dp[i][j-1][t-1]);
dp[i][j][t] = max(dp[i][j][t],dp[i+1][j][t-1]);
dp[i][j][t] = max(dp[i][j][t],dp[i][j+1][t-1]);
dp[i][j][t] = max(dp[i][j][t],dp[i][j][t-1]);
因为所求的是指定位置豆豆数量大于等于c的最小时间,
那么我们不妨放弃第三维度,多开一个拷贝数组来存上一秒的状态,每一次加一个时间来转移。
然后当指定位置豆豆数量大于等于c的时候
直接结束转移,输出当前的时间。 细节见代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define rt return
#define dll(x) scanf("%I64d",&x)
#define xll(x) printf("%I64d\n",x)
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define db(x) cout<<"== [ "<<x<<" ] =="<<endl;
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
ll powmod(ll a, ll b, ll MOD) {ll ans = ; while (b) {if (b % )ans = ans * a % MOD; a = a * a % MOD; b /= ;} return ans;}
inline void getInt(int* p);
const int maxn = ;
const int inf = 0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
int n, m;
int t[][];
int c;
int sx, sy, tx, ty;
int dp[][];
int b[][];
int main()
{
//freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);
//freopen("D:\\common_text\\code_stream\\out.txt","w",stdout);
gbtb;
cin >> n >> m >> c;
repd(i, , n)
{
repd(j, , m)
{
cin >> t[i][j];
}
}
cin >> sx >> sy >> tx >> ty;
int step;
memset(dp, -, sizeof(dp));
dp[sx][sy] = ;
// cout << sx << " " << sy << endl;
for (step = ; ; step++)
{
repd(i, , n)
{
repd(j, , m)
{
b[i][j] = dp[i][j]; // 把上一秒的状态全部保存好
}
}
repd(i, , n)
{
repd(j, , m)
{
// 当前状态 dp[i][j] 可以从5个状态转变来,但是dp[i][j]->dp[i][j] 可以不写状态转移(没意义,原地加1会在后面处理)
if (i >= )
{
dp[i][j] = max(dp[i][j], b[i - ][j]);
}
if (i <= n - )
{
dp[i][j] = max(dp[i][j], b[i + ][j]);
}
if (j >= )
{
dp[i][j] = max(dp[i][j], b[i][j - ]);
}
if (j <= m - )
{
dp[i][j] = max(dp[i][j], b[i][j + ]);
}
if (step % t[i][j] == )
{
if (dp[i][j] >= ) // 可以到达,即 >=0 ,因为dp[sx][sy]=0
{
dp[i][j]++;
}
}
}
}
// repd(i, 1, n)
// {
// repd(j, 1, m)
// {
// cout << dp[i][j] << " ";
// }
// cout << endl;
// }
if (dp[tx][ty] >= c)
{
break;
} }
cout << step << endl; return ;
} inline void getInt(int* p) {
char ch;
do {
ch = getchar();
} while (ch == ' ' || ch == '\n');
if (ch == '-') {
*p = -(getchar() - '');
while ((ch = getchar()) >= '' && ch <= '') {
*p = *p * - ch + '';
}
}
else {
*p = ch - '';
while ((ch = getchar()) >= '' && ch <= '') {
*p = *p * + ch - '';
}
}
}

CCPC-Wannafly Winter Camp Day1 (Div2) 吃豆豆 (DP)的更多相关文章

  1. 2020 CCPC Wannafly Winter Camp Day1 C. 染色图

    2020 CCPC Wannafly Winter Camp Day1 C. 染色图 定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任 ...

  2. 2020 CCPC Wannafly Winter Camp Day1 Div.1&amp F

    #include<bits/stdc++.h> #define forn(i, n) for (int i = 0; i < int(n); i++) #define fore(i, ...

  3. 2020 CCPC Wannafly Winter Camp Day1 - I. K小数查询(分块)

    题目链接:K小数查询 题意:给你一个长度为$n$序列$A$,有$m$个操作,操作分为两种: 输入$x,y,c$,表示对$i\in[x,y] $,令$A_{i}=min(A_{i},c)$ 输入$x,y ...

  4. CCPC Wannafly Winter Camp Div2 部分题解

    Day 1, Div 2, Prob. B - 吃豆豆 题目大意 wls有一个\(n\)行\(m\)列的棋盘,对于第\(i\)行第\(j\)列的格子,每过\(T[i][j]\)秒会在上面出现一个糖果, ...

  5. CCPC-Wannafly Winter Camp Day1 (Div2 ABCFJ) 待补...

    Day1 Div2 场外链接 按题目顺序~ A 机器人 传送门 题意:有两条平行直线A.B,每条直线上有n个点,编号为1~n.在同一直线上,从a站点到b站点耗时为两点间的距离.存在m个特殊站点,只有在 ...

  6. 2019 CCPC-Wannafly Winter Camp Day1 (Div2, onsite)

    solve:4/11 补题:6/11 A 机器人 补题:zz 这是一道分类讨论的题目,有一个规律就是如果必须要从第一个区到第二个区,那么最多转区两次(1到2一次,2到1一次),然后分类讨论即可,只要细 ...

  7. CCPC-Wannafly Winter Camp Day1 (Div2, onsite) A B C E F I J

    A 机器人 链接:https://www.cometoj.com/contest/7/problem/A?problem_id=92 思路: 分两大类讨论: 1. B区没有点: (1)点都在起点左边 ...

  8. CCPC-Wannafly Winter Camp Day1 (Div2, onsite)

    Replay Dup4: 要是不挂机,再多仔细想想就好了 J确实自闭好久,一直在想正确性,最后数据错了,喵喵喵? 还是要保证充足的休息啊,中间睡了一小会儿,也不知道睡了多久,醒来他们就又过了一道 要发 ...

  9. Comet OJ CCPC-Wannafly Winter Camp Day1 (Div2, online mirror) F.爬爬爬山-最短路(Dijkstra)(两个板子)+思维(mdzz...) zhixincode

    爬爬爬山 已经提交 已经通过 9.83% Total Submission:417 Total Accepted:41 题目描述 爬山是wlswls最喜欢的活动之一. 在一个神奇的世界里,一共有nn座 ...

随机推荐

  1. linux系统/var目录的作用

    linux系统/var目录的作用 一.总结 一句话总结: 1.如果/usr是安装时会占用较大硬盘容量目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录. 2.因为var目录主要针对常态性变动 ...

  2. memcached空指针内存错误与死循环问题分析(memcached dead loop and crash bug! issue #260 and issue #370)

    (由于这是发在memcached邮件列表的,所以只能用一下蹩脚的英文了) (you should read the discuss about issue #260 first:  https://g ...

  3. Mybaits多个参数的传递

    今天介绍是多个参数传递到映射xml,进行CURD操作 一.使用参数映射的方法进行传递 1在接口写对应的方法 public interface EmployeeMapper { public Emplo ...

  4. Flask基础总结

    Flask 基础总结 .Flask优点: 拥有强大的第三方组件小而精非常全面,不足就是更新太快 .Flask中的三剑客: HTTPRespone redierct render_template .F ...

  5. kafka 通信报文格式

    1. 序列化一条消息 消息有 key 和 value kafka 提供了基础数据类型的序列化工具,对于业务的自定义类需要自行实现序列化 ProducerRecord 是对象,含 KV 和 header ...

  6. C# 文件打开对话框 图片fitter

    "All Image Files|*.bmp;*.ico;*.gif;*.jpeg;*.jpg;*.png;*.tif;*.tiff|""Windows Bitmap(* ...

  7. linux使用ltrace和strace跟踪程序执行过程

    yum install strace yum install ltrace 1.strace  ping -c 1 www.baidu.com 2.ltrace  ping -c 1 www.baid ...

  8. Django 优秀资源大全

    版权: https://github.com/haiiiiiyun/awesome-django-cn 转自:https://www.jianshu.com/p/38c4dd6d8e28 Awesom ...

  9. Hand on Machine Learning第三章课后作业(2):其余小练习

    -#!/usr/bin/env python -# # # -- coding: utf-8 -- -# # # @Time : 2019.5.22 14:09 -# # # @Author : An ...

  10. kafka学习(二)

    创建kafka生产者 要往kafka写入消息,首先要创建一个生产者对象,并设置一些熟悉.kafka生产者有3个必选的属性.   1.bootstrap.servers 该属性指定broker的地址清单 ...