hdu 1978 How many ways(DP)
2014-01-18 15:37
441 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1978
思路:从右到左、从下到上递推。
设dp[i][j]为dp[i0][j0]可达的点,则dp[i0][j0] += dp[i][j];
PS:每个点可达的区域都是一个三角形,如图:
1 #include <cstdio>
2 #include <cstring>
3 #define N 105
4
5 int a
, dp
;
6
7 int main()
8 {
9 int n, m, t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
scanf("%d",&a[i][j]);
memset(dp, 0, sizeof(dp));
dp
[m] = 1;
for(int i=n; i>=1; i--)
{
for(int j=m; j>=1; j--)
{
for(int ii=i; ii<=i+a[i][j] && ii<=n; ii++)
{
for(int jj=j; jj-j+ii-i<=a[i][j] && jj<=m; jj++)
{
if(ii==i && jj==j) continue;
dp[i][j] = (dp[i][j] + dp[ii][jj])%10000;
}
}
}
}
printf("%d\n",dp[1][1]);
}
return 0;
}View Code
思路:从右到左、从下到上递推。
设dp[i][j]为dp[i0][j0]可达的点,则dp[i0][j0] += dp[i][j];
PS:每个点可达的区域都是一个三角形,如图:
1 #include <cstdio>
2 #include <cstring>
3 #define N 105
4
5 int a
, dp
;
6
7 int main()
8 {
9 int n, m, t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
scanf("%d",&a[i][j]);
memset(dp, 0, sizeof(dp));
dp
[m] = 1;
for(int i=n; i>=1; i--)
{
for(int j=m; j>=1; j--)
{
for(int ii=i; ii<=i+a[i][j] && ii<=n; ii++)
{
for(int jj=j; jj-j+ii-i<=a[i][j] && jj<=m; jj++)
{
if(ii==i && jj==j) continue;
dp[i][j] = (dp[i][j] + dp[ii][jj])%10000;
}
}
}
}
printf("%d\n",dp[1][1]);
}
return 0;
}View Code
相关文章推荐
- linux正则表达式处理文本
- Sublime Text 3 绝对神器
- 使用tcpdump 进行网络包分析
- 如何在ASP.NET中实现验证码?
- 推荐一本好书-----《Java解惑》
- win8下.net framework 3.5安装失败(二)
- VC与JavaScript交互(二) ———— 调用JS函数
- VC与JavaScript交互(一) ———— 如何实现
- bat计算两个时间差
- EasyBCD
- STC15F2K60 脉宽测量程序
- hadoop 配置文件 masters 以及 namenode, jobtracker, secondary namenode
- 10句话帮你理清职场思路
- [转]openmp的一点使用经验
- KVC KVO总结
- Eclipse添加maven之后报错 Eclipse is running in a JRE, but a JDK is required 解决方法
- wget命令检测端口是否监听
- 在Win32下用C++实现多线程读写锁
- android AudioManager类 详解
- NSURLConnection ignore unverified certificate error when sending a synchronise request