• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 51Nod 1118 机器人走方格(dp/快速幂)

51Nod 1118 机器人走方格(dp/快速幂)

作者:JUST CODE IT 字体:[增加 减小] 来源:互联网 时间:2017-09-06

JUST CODE IT通过本文主要向大家介绍了51nod,51nod官网,51nod登录,51nod算法,51nod 1284等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

题目链接

 

长知识了。。。

(a+b)%mod=(a%mod+b%mod)%mod

a*b%mod=(a%mod*b%mod)%mod

a/b%mod =a*(b^(mod-2))%mod;

然后开干。。

 

第一种排列组合:

这个在高中基本都做过的题目,

从1,1到n,m一共朝下走n-1步,朝右走m-1步

总共n+m-2,然后选一条路n-1或者m-1就是结果

C(n+m-2,n-1)

因为结果要%mod,就要用到第三个公式

其中b^(mod-2)很明显的快速幂(前面才做到的题目)

 

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
const long long mod=1000000000+7;

long long sum(int x,int num){
	long long fz=1;
	while(num--)
		fz*=x--,fz%=mod;
	return fz;
}
long long jc(int x){
	long long sum=1;
	while(x) sum*=x--,sum%=mod;
	return sum;
}
long long ksm(long long x){
	long long mm=mod-2;
	long long sum=1,temp=x;
	while(mm){
		if(mm&1) sum=sum*temp%mod;
		temp*=temp;
		temp%=mod;
		mm=mm>>1;
	}
	return sum%mod;
}
int main(){
	int n,m;
	cin>>n>>m;
	int minn=(n,m);
	int fz=jc(n-1);
	int su=sum(n+m-2,n-1);
	
/*
(x/y) %mod =x*(y^(mod-2))%mod;
*/
    long long chshu=ksm(fz);
    //cout<<fz<<" "<<su<<" "<<chshu<<endl;
	cout<<su*chshu%mod;
	return 0;
}

 

 

 

 

 

第二种dp:

这题类似于小兔子跳楼梯,每一个点都是由上面或者左面的移动一次得到

dp[i][j]=(dp[i-1][j]%mod+dp[i][j-1]%mod)%mod

 

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
const long mod=1000000000+7;
int main(){
	int n,m;
	cin>>n>>m;
	int a[1001][1001];
	a[1][1]=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(i==1&&j==1) continue;
			a[i][j]=(a[i-1][j]%mod+a[i][j-1]%mod)%mod;
		}
	} 
	cout<<a[n][m];
	return 0;
}

 

 

 

 

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 51Nod 1118 机器人走方格(dp/快速幂)

相关文章

  • 2017-05-28浅析C语言中strtol()函数与strtoul()函数的用法
  • 2017-05-28C++语言 STL容器list总结
  • 2017-05-28C++中继承与组合的区别详细解析
  • 2017-05-28实例解析C++设计模式编程中简单工厂模式的采用
  • 2017-05-28大数(高精度数)模板(分享)
  • 2017-05-28封装常用正则表达式的用法
  • 2017-05-28C++设计模式之命令模式
  • 2017-05-28用C实现添加和读取配置文件函数
  • 2017-05-28C++常用字符串分割方法实例汇总
  • 2017-05-28C语言 MD5的源码实例详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++模板之特化与偏特化详解
    • C语言字符串原地压缩实现方法
    • C# interface与delegate效能比较的深入解析
    • c语言10个经典小程序
    • c++获取进程信息列表和进程所调用的dll列表
    • C语言实现逆波兰式实例
    • POJ2151 Check the difficulty of problems 概率DP
    • C++设计模式编程中proxy代理模式的使用实例
    • C++类模板与模板类深入详解
    • C++ 模拟实现list(迭代器)实现代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有