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; ...
随机推荐
- sql: oracle, for update和for update nowait的区别
1. oracle for update和for update nowait的区别 http://www.cnblogs.com/quanweiru/archive/2012/11/09/276222 ...
- poj 3778
这就是个超级水题……!!!!写一写来纪念一下自己的错误…… 如果某个学生的的成绩是其他俩个或三个学生成绩的和则给予奖励 直接暴力,所以一开始直接用数组标记两个人或三个人的和,但是忽略了这种情况 20( ...
- html5之拖放简单效果
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title> ...
- linux下nginx负载均衡部署
nginx负载均衡部署 Nginx("engine x") 是一个高性能的 HTTP 和 反向代理 server,也是一个 IMAP/POP3/SMTP 代理server. Ngi ...
- ASP.NET、HTML+CSS - 弹出提示窗体
刷新数据,提示之后,CSS样式改变: 解决方案: 在ASP.NET中,如果是添加信息成功之后出现提示信息,那么只能用 ClientScript.RegisterStartupScript(this. ...
- HTTP数据包头解析(简单清楚)
[转]HTTP请求模型和头信息参考 参考: http://blog.csdn.net/baggio785/archive/2006/04/13/661410.aspx模型: http://blog.c ...
- NYOJ 1085 数单词 (AC自己主动机模板题)
数单词 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 为了可以顺利通过英语四六级考试,如今大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中能够通过六 ...
- D3D 练习小框架
自己练习D3D 程序搭的小框架,记录在这里,将来看到好回顾自己独自摸索的苦逼样子. #pragma once #pragma comment(lib,"d3d9.lib") #pr ...
- Swift - 动画效果的实现方法总结(附样例)
在iOS中,实现动画有两种方法.一个是统一的animateWithDuration,另一个是组合出现的beginAnimations和commitAnimations.这三个方法都是类方法. 一,使用 ...
- DELPHI SOKET 编程(使用TServerSocket和TClientSocket)
本文采用delphi7+TServerSocket+TClientSocket; 笔者在工作中遇到对局域网中各工作站与服务器之间进行Socket通信的问题.现在将本人总结出来的TServerSocke ...