摘要: 题目大意是:—乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计算木棒的可能最小长度。每一节木棍的长度都用大于零的整数表示。看到这道题首先想到的就是暴力法枚举。枚举原始长度dfs判断该长度是否可以由小木棒组合而成。不过直接这样肯定超时,自然想到要添加剪枝;—剪枝策略:—1、已知木棒总长度sum,原始木棒长度L一定满足sum%L = 0;—2、将木棒从大到小排序,因为越长的木棒对后面的约束越大;—3、当一根木棒搜索失败时,跳过与它相同长度的;—4、 阅读全文
posted @ 2012-02-23 23:20 背着超人飞 阅读(205) 评论(0) 推荐(0)
摘要: 1 #include <iostream> 2 #define MAX 10 3 using namespace std; 4 char a[MAX][MAX]; 5 int tot , n, k; 6 bool vis[MAX];//用于记录某一列上是否已摆过棋子 7 void dfs(int cur, int num)//深搜开始 8 { 9 if(num == k)10 {11 tot ++;//得到一种情况12 return;13 }14 if(cur == n)15 return;16 for(... 阅读全文
posted @ 2012-02-23 22:49 背着超人飞 阅读(135) 评论(0) 推荐(0)