摘要:
/*字符串DP,但是要找到用最小的字符串来匹配,所以用dp储存当前所使用过的字符串数。打印路径的话直接用数组表示前缀*/#include <iostream>#include <string>#include <cstring>#include <cstdio>using namespace std;string s = "22233344115566070778889990";#define X 50010int dp[X],pre[X],len[X],p[X],L;string a[X],in[X],b;void chan 阅读全文
摘要:
/*题目: 把石头分成两堆,问最小的重量差值为多少。分析: 先求和,然后用和的一半转为01背包。转移方程为: dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+w[i]); 缩小维度后为dp[j] = max(dp[j],dp[j-w[i]]+w[i]);*/#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int X = 2000010;int dp[X],w[25],n;int main(){ freopen(& 阅读全文
摘要:
/*题目: 寻找图中的最小环,输出路径。分析: 可以通过枚举删除其中的一条边,看看能否从该边的一点走到另一点,若能并且该最短路的长度加上 删除的边的长度小于当前的最优解的话,更新路径与最优解。而打印路径可以通过数组来表示该点的 前一顶点,然后递归打印路径即可。最短路可以通过dijkstra算法求出。估计的时间复杂度为O(n^2*E)。 我交了一下,用时:1.328 内存:264 KB*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int X = 阅读全文