noip模拟赛 蒜头君的坐骑
分析:标准的棋盘dp问题.
如果没有技能,那么就很好做了,相当于传纸条的做法.有了技能的限制,我们就要加上一维表示用了多少次技能,这个时候转移就要用到dfs了,而且不能用填表法,要用刷表法,从当前位置用技能的状态来更新到达的位置的状态,dp状态转移方程也要写成刷表法的形式.
如果很难从以前的状态推得现在的状态,那么就用现在的状态去更新以后的状态吧!
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std;
const int inf = 0x7ffffff; int n, m, t, k, h, atk,f[][][],a[][],ans = inf; int jisuan(int xue, int gongji)
{
return(h - ) / gongji * xue;
} void dfs(int x,int y,int cur,int xue,int gongji,int depth)
{
if (depth > k)
{
f[x][y][cur + ] = min(f[x][y][cur + ], xue);
return;
}
if (x + <= n)
dfs(x + , y, cur, xue + jisuan(a[x + ][y],gongji + a[x + ][y]), gongji + a[x + ][y], depth + );
if (y + <= m)
dfs(x, y + , cur, xue + jisuan(a[x][y + ], gongji + a[x][y + ]), gongji + a[x][y + ], depth + );
} int main()
{
scanf("%d%d%d%d%d%d", &n, &m, &t, &k, &h, &atk);
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
scanf("%d", &a[i][j]);
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
for (int l = ; l <= t; l++)
f[i][j][l] = inf;
f[][][] = ;
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
for (int l = ; l <= t; l++)
{
if (l != t)
dfs(i, j, l, f[i][j][l], atk,);
if (i + <= n)
f[i + ][j][l] = min(f[i + ][j][l], f[i][j][l] + jisuan(a[i + ][j], atk));
if (j + <= m)
f[i][j + ][l] = min(f[i][j + ][l], f[i][j][l] + jisuan(a[i][j + ], atk));
}
for (int i = ; i <= t; i++)
ans = min(ans, f[n][m][i]);
printf("%d\n", ans); return ;
}
noip模拟赛 蒜头君的坐骑的更多相关文章
- noip模拟赛 蒜头君救人
分析:之前的一道模拟赛题是dp+dfs,这道题是dp+bfs. 我们设f[stu][i][j]为当前状态为stu,走到(i,j)的答案,考虑怎么设计stu,每个人的状态有3种:要么在原地,要么被背着, ...
- noip模拟赛 蒜头君的兔子
分析:直接暴力算有30分,像斐波那契那样推式子算有60分,如果想要得到100分就要用一种数列题的常见优化--矩阵了. 当前的兔子数和十年内的兔子数有关,我们需要1个1*11的矩阵,来记录当前为0岁.1 ...
- noip模拟赛 蒜头君的排序
分析:其实就是求m个区间的逆序对个数,题目真的是明摆着让我们用莫队算法,套用树状数组就可以了. 具体怎么转移呢?如果移动R,那么对区间[l,r]有影响的是R左边的元素,我们只需要看有多少在R左边比a[ ...
- noip模拟赛 蒜头君的树
分析:这道题问的是树上整体的答案,当然要从整体上去考虑. 一条边对答案的贡献是这条边一端连接的点的个数*另一端连接的点的个数*边权,可以用一次dfs来统计答案,之后每次更改操作在原答案的基础上增减就好 ...
- noip模拟赛 蒜头君打地鼠
分析:直接一个一个地去暴力枚举分数比较少,我们需要一种比较快的统计一定空间内1的数量,标准做法是前缀和,但是二维前缀和维护的是一个矩形内的值,这个是旋转过的该怎么办?可以把图旋转45°,不过这样比较考 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
随机推荐
- bzoj 1059: [ZJOI2007]矩阵游戏【匈牙利算法】
注意到怎么换都行,但是如果把某个黑方块用在对角线上,它原来所在的行列的的黑方块就都不能用 所以要选出n组不重的行列组合,这里用匈牙利算法做二分图匹配即可(用了时间戳优化) #include<io ...
- bzoj2679: [Usaco2012 Open]Balanced Cow Subsets(折半搜索)
2679: [Usaco2012 Open]Balanced Cow Subsets Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 462 Solv ...
- [App Store Connect帮助]四、添加 App 图标、App 预览和屏幕快照(2)添加一个 App Store 图标
您必须提供一个 App Store 图标,用于在 App Store 中的不同部分展示您的 App.请遵照 Human Interface Guidelines(<人机界面准则>)创建您的 ...
- goalng——time包学习
1.星期:type Weekday int const ( Sunday Weekday = iota Monday Tuesday Wednesday Thursday Friday Saturda ...
- 键盘按钮keyCode大全:获取按键对应的键值的方法
没有大全,只有方法,授人与鱼不如授人于渔: 下面这行代码,大家可以打在控制台里,直接进行测试: document.body.onkeyup = function (e) { e = e || wind ...
- StackOverflow 创始人关于如何高效编程的清单
这是 StackOverflow 联合创始人 Jeff Atwood 注释的十戒.程序员普遍有很强的自尊心,都应该看看本文,打印下来时刻提醒自己. “无我编程”发生在开发阶段,表现为技术团队经常通过同 ...
- Parameterized testing with any Python test framework
1. 在进行单元测试时,很多时候需要进行参数化 尝试过使用 from nose_parameterized import parameterized 但在使用过程中会报错,后来将上面的内容改为了下面的 ...
- [Qt Quick入门] 基本元素初体验
Qt Quick作为QML语言的标准库,提供了很多基本元素和控件来帮助我们构建Qt Quick应用.这节我们简要地介绍一些Qt Quick元素,如Rectangle.Item.Text.Button. ...
- hihocoder #1698 假期计划 (排列组合+费马小定理+乘法逆元)
Description 小Ho未来有一个为期N天的假期,他计划在假期中看A部电影,刷B道编程题.为了劳逸结合,他决定先拿出若干天看电影,再拿出若干天刷题,最后再留若干天看电影.(若干代指大于0) 每 ...
- ajax怎么理解?
Ajix是创建交互式网页的前端网页开发技术,不是一种语言,ajax是基于http来传输数据的,他是利用浏览器提供操作http的接口(XMLHttpRequest或者activeXobject),来操作 ...