1、每次计算只要取最后一位即可。
2、使用快速幂提高效率。
#include
using namespace std;
int pow(int a,int n)
{
if(n==1)
return a;
else if(n%2==1)
return (a*pow(a,n-1))%10;
else
{
int tmp;
tmp=pow(a,n>>1);
...
分类:
Web程序 时间:
2015-03-14 21:52:16
阅读次数:
187
分析:利用求最大子段和的思想进行求解。
1、首先累加s[i][j],表示第j列中i从第1行加到第i行的和。
2、对每一列的i1到i2行的和进行计算(0
3、对t[k]求最大字段和。
4、对所有t[k]求出的最大字段和求最大值,即可得到最大子矩阵的和。
5、注意:对maxres=0;maxres|=1
#include
using namespace std;
int G...
分类:
其他好文 时间:
2015-03-14 21:47:19
阅读次数:
207
树状数组
关于树状数组的详细介绍可见刘汝佳《算法竞赛入门经典:训练指南》
对于一个n元素的数组A[n],可执行如下操作:
Add(I, d):让A[i]变成A[i]+d。
Query(L, R):返回A[L]+A[L+1]+…+A[R]。
注意:树状数组只能计算A[1]开始的和,A[0]这个元素是不能用的。上面操作复杂度都是...
分类:
编程语言 时间:
2015-03-14 21:44:37
阅读次数:
206
使用深度优先搜索解决,很简单的题。
建立26个字母的邻接矩阵图和访问数组,从字母b开始搜索,若能到达字母m则可以变形。
#include
using namespace std;
int v[27];
int m[27][27];
bool dfs(int x)
{
if(x=='m'-'a') //搜到字母m结束
return true;
for(int i=0...
分类:
其他好文 时间:
2015-03-14 20:06:59
阅读次数:
190
问题:有2n个人排队进电影院,票价是50美分。在这2n个人当中,其中n个人只有50美分,另外n个人有1美元(纸票子)。愚蠢的电影院开始卖票时1分钱也没有。问:有多少种排队方法使得每当一个拥有1美元买票时,电影院都有50美分找钱
注:1美元=100美分拥有1美元的人,拥有的是纸币,没法破成2个50美分
解析:符合卡特兰数( Catalan数),因此直接可以得出答案:(2n)/(n!*(n...
分类:
其他好文 时间:
2015-03-14 09:40:35
阅读次数:
215
题目地址:POJ 2762
先缩点,然后判断拓扑网络每层的个数是否为1(我承认如果事先不知道这题需要拓扑排序我是想不出来这点的。。。)。因为假如有一层为2的话,那么从此之后这两个岔路的点就不可能从一点到另一点的。
代码如下:#include
#include
#include
#include
#include <al...
分类:
编程语言 时间:
2015-03-13 20:45:23
阅读次数:
176
题目地址:HDU 1428
先用BFS+优先队列求出所有点到机房的最短距离,然后用记忆化搜索去搜。
代码如下:#include
#include
#include
#include
#include
#include
#include
#include <set...
分类:
其他好文 时间:
2015-03-13 12:44:34
阅读次数:
103
题目地址:POJ3666
dp[i][j]表示第i位时,值为j时的最小代价。因为j太大,由于要改变值的话,变到与之最近的值相同是最优的,所以可以离散化,这样,j对应了各个值得下标。复杂度O(n^2)。
代码如下:#include
#include
#include
#include
#include <algorith...
分类:
其他好文 时间:
2015-03-13 10:58:05
阅读次数:
154
题目地址:POJ 2375
对每个点向与之相邻并h小于该点的点加有向边。然后强连通缩点。问题就转化成了最少加几条边使得图为强连通图,取入度为0和出度为0的点数的较大者即可。注意,当强连通分量只有一个的时候,答案是0,而不是1.
代码如下:
#include
#include
#include
#include
#include
#include
#include
#includ...
分类:
其他好文 时间:
2015-03-12 19:15:06
阅读次数:
197