算法笔记
内存计算方法 -
1 M = 1024 * 1024 个B
一个int是4个B
内存 = (int个数*4)/(1024*1024);
其余的以此类推
代码运行时间
#include <time.h>
int main()
{
clock_t start, finish;
//clock_t为CPU时钟计时单元数
start = clock();
//clock()函数返回此时CPU时钟计时单元数
/*
你的代码
*/
finish = clock();
//clock()函数返回此时CPU时钟计时单元数
cout <<endl<<"the time cost is:" << double(finish - start) / CLOCKS_PER_SEC<<endl;
//finish与start的差值即为程序运行花费的CPU时钟单元数量,再除每秒CPU有多少个时钟单元,即为程序耗时
return 0;
}
Java 加快读写的方法
import java.io.*;
public class Main{
static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer st = new StreamTokenizer(bf);
static PrintWriter pw = new PrintWriter(System.out);
public static void main(String[] args) throws IOException {
pw.println("fs");
double[] b = new double[10];
for(int i = 0 ; i< 4 ; i ++) {
b[i] = I();
}
for(int i = 0 ; i < 4 ; i ++) {
pw.println(b[i]);
}
pw.flush(); // 这个不能掉
}
static double I() throws IOException{
st.nextToken();
return st.nval;
}
}
数学
整数划分的方法(dp,递归,母函数)
给定一个整数n , 拆分的数字可以重复,其中数字不可大于m ,问有多少总拆分方法
分析问题
1, 如果 n 或者 m 当中有一者等于1的话,那它只有一种拆分方法,全部为1
2,如果n 小于 m ,但是m肯定是不能大于n的,所以
dp[n][m] = dp[n][n]
3 , 如果n 等于 m 例如 n = 4, m = 4 则 4 = 4 算一种拆分方法 ,所以接下来就是对 n 进行 m-1 的拆分 ,因为 m = 4 的时候已经算进去了
dp[n][m] = dp[n][m-1] + 1
这个1 就是上面的 4 = 4的一种方法4,当n 大于m 接下来有两种选择进行拆分
(1)划分中有一个数为m,那么从n中减去m 即
n-m
继续对n-m进行拆分dp[n-m][m]
(2)划分中全部的数都小于m,即每个数都不大于m-1,继续拆分
dp[n][m-1]
总结可得
d p [ n ] [ m ] = { 1 n ∣ ∣ m = = 1 d p [ n ] [ n ] n < m d p [