HDU刷题六

1025:求最长上升子序列,DP[i]+二分即可

1026:给出一个M*N的地图,由左上角走到右下角的最短时间,墙不可走,通过有怪的格要多花几秒
题解:广搜+优先队列,每次取状态时间最短的,到达终点就跳出,注意存路径

1027:给出N与M,输出1到N的全排序中第M小的排列

题解:逐位判断,每多一个位就多一个阶乘,题面的M最大10000,而8!=40320,所以N只需要讨论最后面的八个位
然后每个位代表其后有对应的组合数,如对第一位有7!种方案,对第二位有6!种方案
则M/(7!)+1就是第一位的值,然后M-=(M/(7!)+1)*(7!),再对第二位判断
即M/(6!)+1就是第二位的值,然后M-=(M/(6!)+1)*(6!),再对第三位判断,如此遍历八个位即可

1028:给出整数N,输出把N分成若干个正整数(1到N个)的方法总数和

题解:dp[i][j]=dp[i-1][j]+dp[i][j-1],把J分成1到N份的方案=把J分成1到N-1份方案+把J-1分成N份的方案

1029:给出N个,N为奇数,输出最现最多的那个数字是多少,水题,开MAP即可

你可能感兴趣的:(算法训练)