链接:https://ac.nowcoder.com/acm/problem/21873
来源:牛客网
题意:
牛牛的计算机一共有m块内存,现在有n条指令,每条指令是一个01序列
如果指令的第i个字符为1,说明这条指令需要访问第i块内存
每条指令的执行代价为k^2, k为新访问内存的数量,即之前的指令都没有访问到的内存数量
你可以随意安排n条指令的执行顺序,求执行完所有指令的最小代价
输入:
第一行先输入一个整数n,m(1 ≤ n ≤ 20)
接下来每行输入一个01字符串,长度不超过20
分析:
因为可以随意安排执行顺序,暴力就是20!,必然TLE,从记忆化搜索可以得到动态规划的做法
定义dp[i][j],表示执行完前i次后状态为j的最小代价,状态j是什么呢?就是将前i次选的i条指令的编号压缩成一个数j,比如j的二进制为(110),就代表前2次分别执行了编号为1和2的指令
定义val[i][j]表示到达dp[i][j]时,所选的指令所代表的字符串的状态,可以将每条指令看成一个二进