hdu1876(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1876
题意:问机器人到达终点的过程中最多有几次完全消耗完能量,消耗完这么多次能量的方式有几种。
分析:模拟一下可知,每次走到下一次消耗完时必定在一条对角线上。
以sample为例:

由于整个过程是以对角线的方向递推下去的,每次必定是往右下方走的,所以只需按着正常循环递推即可,当然按对角线右下方循环也可,不过那样略微麻烦。dp[i][j].num表示走到点(i,j)时消最多次耗完能量的次数,dp[i][j].cnt表示走到点(i,j)时消最多次耗完能量的方式。
状态转移方程为:
if(dp[x][y].num<dp[i][j].num+1)
{
dp[x][y].num=dp[i][j].num+1;
dp[x][y].cnt=dp[i][j].cnt;
}
else if(dp[x][y].num==dp[i][j].num+1)
dp[x][y].cnt+=dp[i][j].cnt;
本题还有好几个坑,能量为0的格子不能走,在终点时就不用递推了,样例没有刚好在终点时消耗完能量,所以这里被坑得好惨T^^T
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 10010
using namespace std;
struct node
{
int cnt,num;
} dp[][];
int flag[][],a[][];
int main()
{
int t,n,m,x,y;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)scanf("%d",&a[i][j]);
memset(flag,,sizeof(flag));
memset(dp,,sizeof(dp));
flag[][]=;
dp[][].cnt=;
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
{
if(i==n&&j==m)continue;//这里尤为注意
if(flag[i][j])
{
if(!a[i][j])continue;//能量为0时不能走
x=i+a[i][j];
y=j;
int t=a[i][j]+;
if(x+y<=m+n)
{
while(t--)
{
if(x>n||y>m||x<=||y<=)//不在方格内不算
{
x--;
y++;
continue;
}
flag[x][y]=;
if(dp[x][y].num<dp[i][j].num+)//取次数多的
{
dp[x][y].num=dp[i][j].num+;
dp[x][y].cnt=dp[i][j].cnt;
}
else if(dp[x][y].num==dp[i][j].num+)
dp[x][y].cnt+=dp[i][j].cnt;
x--;
y++;
}
}
else//走到终点没消耗完能量的
{
if(dp[n][m].num<dp[i][j].num)
{
dp[n][m].num=dp[i][j].num;
dp[n][m].cnt=dp[i][j].cnt;
}
else if(dp[n][m].num==dp[i][j].num)
dp[n][m].cnt+=dp[i][j].cnt;
}
}
}
printf("%d %d\n",dp[n][m].num,dp[n][m].cnt);
}
}
hdu1876(dp)的更多相关文章
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
- Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)
Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...
- 最长公共子序列长度(dp)
/// 求两个字符串的最大公共子序列长度,最长公共子序列则并不要求连续,但要求前后顺序(dp) #include <bits/stdc++.h> using namespace std; ...
随机推荐
- jquery 提交数据
目录 jquery ajax的应用 1 表单提交 2 ajax的提交(ajax post get) 普通的表单提交 <%@ page language="java" impo ...
- Javascript 进阶 封装
js中处处是对象,面向对象的第一步当然就是封装了,由于Js中没有类的概念,所以封装起来也比较麻烦,下面介绍两种js的封装. 1.使用约定优先的原则,将所有的私有变量以_开头 <script ty ...
- 九度OnlineJudge之1020:最小长方形
题目描述: 给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内.长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内. 输入: ...
- 【免费讲座IX算法第一阶段】转专业找CS工作“打狗棒法”
个人经验CS不相干,如何收拾简历?如何获取知识,在最短的时间内找到一份工作需要?如何避免盲目刷称号,迅速制定学习计划?如何准备面试? 星期五.九算法黄蓉老师受邀嘉宾 [在线共享] 她成功转专业的六个月 ...
- 拍照图片滤镜sample
本文章主要介绍拍完照片后对图片的渲染进行处理 可以对拍出的照片进行选择不同的滤镜,令在图片上附有编辑框,供大家对图片进行描述,这是一个可以手动拖动的编辑框,在这里主要介绍下,手指放到控件上什么情况下视 ...
- 其他主机连接本地主机Tomcat会出现的防火墙问题
当我在A机上开启Tomcat后,B机上打开浏览器不能访问到Tomcat的服务器,这是由于Windows防火墙的原因 可以由以下两种做法: 关闭Windows防火墙: 如果不想关闭Windows防火墙, ...
- Firemonkey绑定对象列表
在实现Firemonkey绑定对象列表的过程中,我遇到的一些现有教程当中没有提到的细节,分享一下. 1.追加对象 用Navigator插入记录,位置总是在当前记录之前插入,没有在最后追加一个对象的方法 ...
- 与众不同 windows phone (6) - Isolated Storage(独立存储)
原文:与众不同 windows phone (6) - Isolated Storage(独立存储) [索引页][源码下载] 与众不同 windows phone (6) - Isolated Sto ...
- SDL Guide 中文译版
SDL即Simple DirectMedia Layer,类似DirectX,是完整的游戏.多媒体开发包,但不同的是它跨越几乎所有的平台,有各种语言的接口,多种语言的文档,而这一切都是广大志愿者完成的 ...
- jQuery为啥要提供一个load()方法?
上午的时候,找个闲暇事件整理之前整理的一些关于jQuery的东西,看到了一个之前做的jQuery的$(document).ready()与window.onload()方法的比較. 上面两个方法最重要 ...