摘要: 题目链接大致题意:给定一堆不定长度的小棒子,问他们能否构成一个正方形。解题思路:POJ1011的热身题,DFS+剪枝本题大致做法就是对所有小棒子长度求和sum,sum就是正方形的周长,sum/4就是边长side。问题就转变为:这堆小棒子能否刚好组合成为4根长度均为side的大棒子不难了解,小棒子的长度越长,其灵活性越差。例如长度为5的一根棒子的组合方式要比5根长度为1的棒子的组合方式少,这就是灵活性的体现。由此,我们首先要对这堆小棒子降序排序,从最长的棒子开始进行DFS剪枝,有3处可剪:1、 要组合为正方形,必须满足sum%4==0;2、 所有小棒子中最长的一根,必须满足Max_length 阅读全文
posted @ 2013-04-29 20:58 xindoo 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 题目链接题意 有个小球,只能向右边或下边滚动,而且它下一步滚动的步数是它在当前点上的数字,如果是0表示进入一个死胡同。求它从左上角到右下角到路径数目。注意, 题目给了提示了,要用64位的整数。记忆化搜索方法#include #include #define ll __int64int n;ll vis[36][36];char board[36][36];ll dfs(int x,int y){ if(x==n-1&&y==n-1) return 1; if(board[x][y]=='0') return 0; if(vis[x][y]) ... 阅读全文
posted @ 2013-04-29 14:24 xindoo 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 题目链接Problem DescriptionFatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension n: each grid location is labelled (p,q) where 0 #include #include using namespace std;int n, k, dp[101][101];int map[101][101];int dfs(int a,int b){ if(dp[a][b]) return dp[a]... 阅读全文
posted @ 2013-04-29 10:18 xindoo 阅读(191) 评论(0) 推荐(0) 编辑