回溯法-难
冰阔落
Stay hungry, Stay foolish, Stop when you are perfect.
展开
-
UVA 10160 - Servicing Stations
#include #define ll long long long long st[40], later[40]; int num, n, m; bool DFS(long long build, int step, int cur) { if (build == ((ll)1 << n) -1) return true; if (step == num) return fal原创 2014-08-23 10:20:07 · 1688 阅读 · 0 评论 -
UVA 185 - Roman Numerals
#include #include int yes, len, count, change[200], vis[10] = {0}; char str[100], letter[8] = {"IVXLCDM"}, record[8]; bool judge() { int rec[200] = {0}, num[3] = {0}, cnt = 0; for (int i = 0; i原创 2014-08-24 00:27:58 · 1652 阅读 · 0 评论 -
UVA 387 - A Puzzling Problem
#include int vis[4][4] = {0}, t = 0, n; struct Piece { int row; int column; char data[5][5]; } pie[20]; bool DFS(int cur) { if (cur == n) return true; for (int i = 0; i <= 4 - pie[cur].row原创 2014-08-25 16:25:29 · 1639 阅读 · 0 评论 -
UVA 307 - Sticks
#include #include #include using namespace std; int n, top, sum, Max, vis[105], part[105]; int cmp(int a, int b) { return a > b; } bool DFS(int pos, int cnt, int lenth) { if (cnt == top) ret原创 2014-08-24 17:31:34 · 1637 阅读 · 0 评论 -
UVA - 519 Puzzle (II)
#include #include #include char pi[36][5], data[6][6][5]; int num, vis[40], row, col; int cmp(const void*a, const void*b) { return strcmp((char*)a, (char*)b); } bool judge(int x, int y, int i)原创 2014-08-26 20:18:51 · 1578 阅读 · 0 评论 -
UVA 10123 - No Tipping
#include #include #include #include int cnt[3], cur[3]; double wl1, wr1, wl2, wr2; struct Block { int pos; int w; } block[3][30], record[30], x; int cmp(const void *c, const void *d) { Bloc原创 2014-08-22 14:08:39 · 1569 阅读 · 0 评论 -
UVA 529 - Addition Chains
题目大意:给一个数字n, 然后输出一个元素个数最少的从1到n的序列(可能有多种方案,输出其中一种即可)。 其中对于第k个数Ak, 它的值等于Ai+Aj( ) 。 解题思路:迭代深搜的方法,先确定数的基数,就是说组成这个数最少需要几个数,例如1个数最大组成1, 2个数最大组成2, 而3个数最大为4(每增加一个数,最大值 * 2) 一个很重要的剪枝,当当前第i个数,为k, k的在剩余原创 2014-08-30 09:00:25 · 1643 阅读 · 0 评论 -
UVA 565 - Pizza Anyone?
#include #include int main() { char str[50]; while (scanf("%s", str) != EOF) { int n, status, num, person[100][2] = {0}, Max = (1 << 16) - 1; for (n = 0; str[0] != '.'; n++) { for (int i =原创 2014-08-30 17:32:34 · 1875 阅读 · 0 评论