摘要:
题目大意是:乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过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)