上一页 1 ··· 32 33 34 35 36 37 38 39 40 ··· 71 下一页
摘要: 为了这题还去学了下迭代加深 回来还是不会写只好参考各大神的代码及题解了二分枚举最大可以切的块数 然后就是各种分析及优化USACO题解里写了7个优化。。问题分析抽象一下就可以发现,算法的本质是多重背包问题。 补充:这题与破锣乐队都是多个背包,不可重复放物品。区别在于破锣乐队要有顺序,此题不需要,这样此题就必须要搜索才行。 单个背包的问题我们可以用DP解决,但是对于这种问题我们只能用搜索了。 但是可以看一看这道题的数据规模:1 max{board} 那么这个rail应该舍去 By Clarkok 1 /* 2 ID: shangca2 3 LANG: C++ 4 TASK:... 阅读全文
posted @ 2013-08-28 19:36 _雨 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 链接把迭代加深理解错了 自己写了半天也没写对所谓迭代加深,就是在深度无上限的情况下,先预估一个深度(尽量小)进行搜索,如果没有找到解,再逐步放大深度搜索。这种方法虽然会导致重复的遍历 某些结点,但是由于搜索的复杂度是呈指数级别增加的,所以对于下一层搜索,前面的工作可以忽略不计,因而不会导致时间上的亏空。IDA*就是一个加了层数限制depth的DFS,超过了限制就不在搜索下去,如果在当前层数没有搜到目标状态,就加大层数限制depth,这里还只是一个IDA算法,并不是A*的。当然我们可以用A*的估计函数去剪枝,如果当前深度d+h()>depth的时候就可以不再搜索下去了,这样就是IDA*了。 阅读全文
posted @ 2013-08-27 22:09 _雨 阅读(640) 评论(0) 推荐(0) 编辑
摘要: 这次题有点水 涨了不少A题 转成数字 排下序就好B题 直接模拟C题 dfs 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 1010 8 char s[12]; 9 int a[12],o,m,k[1010],flag;10 void dfs(int pre,int s1,int s2,int v)11 {12 int i;13 if(flag)14 return ;15 if(v)16 k[v] = pre;17 ... 阅读全文
posted @ 2013-08-27 14:42 _雨 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 链接这样的叫迭代吗。。最近多做些搜索题了要分行分列搜 判断满足条件 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int o[8][8],n,m,q,p[8][8]; 8 int ans; 9 int judge(int x,int y)10 {11 int i,j,kk=0;12 if(o[x][y])13 return 0;14 for(i = x-1 ; i>= 0 ;i--)15 if(o[i][y]||p[i][y])16 ... 阅读全文
posted @ 2013-08-26 14:48 _雨 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 链接想O(n*n)的DP 怎么想都超内存 看讨论有说hash+DP过的 实现比较繁琐大部分直接暴力过了直接枚举每个i j 与他们在一条线上的点 是不是给出的点注意它必须能跳进和跳出 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 5010 8 bool flag[N][N]; 9 struct node10 {11 int x,y;12 }p[N];13 bool cmp(node a,node b)14 {15 if(a.x==b.x)16 ... 阅读全文
posted @ 2013-08-26 10:54 _雨 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 链接这题可以算树形DP吧 树上的递推对于树上的某个节点 反着算比较好做 就是算有多少有simple路径的固定某个节点u 另两个节点 有两种取法1.从不同子树里各选一个2.从所有子树里选一个 再从以u为跟的子树 外面选一个求总和 1 #pragma comment(linker, "/STACK:16777216") 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 100010 9 #define LL __int6410 struct node 阅读全文
posted @ 2013-08-25 21:35 _雨 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 链接归属简单树形DP 挺简单的 跟第一道一样 就是我跑偏了题意。。以为要覆盖点 纠结啊 推了N久 推不出啊 然后就郁闷了 打了局游戏 边想边打 实在想不出 看下题解 跑偏了分两种情况D方程见代码 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 2010 8 int f[N]; 9 struct node10 {11 int f,ch,m1,m0,br;12 void init()13 {14 f = m0 =ch = br... 阅读全文
posted @ 2013-08-25 19:23 _雨 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 链接类似最大矩阵 sum存下 枚举最大就是 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int sum[110][110],o[110][110]; 8 int main() 9 {10 int i,j,n,w,h,a,b;11 while(scanf("%d",&n)&&n)12 {13 scanf("%d%d",&h,&w);14 memset(o,0,sizeof(o));15 memset(s 阅读全文
posted @ 2013-08-25 14:34 _雨 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 链接真的1A了。。一开始想复杂了 想着补全再删 没想好 后来想到递归 大的回文串是由小的推过来的一直递归下去 对于当前的i,j可以选择保留或者删除 选个最小的 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 2010 8 #define INF 0xfffffff 9 int v[500][2];10 int dp[N][N];11 char s[N];12 int dfs(int i,int j)13 {14 if(i>j) return 0;15 ... 阅读全文
posted @ 2013-08-25 13:47 _雨 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 链接这叫树形DP吗。。?断开某条边 求剩下两颗树数权值和的差最小dfs一遍 枚举边 查了n久 wa n次 dp数组没初始化。。在poj上1A感觉应该挺爽 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 100010 8 #define M 1000010 9 #define LL long long10 LL dp[Mdp[i])69 o = s-dp[i]-dp[i];70 else71 ... 阅读全文
posted @ 2013-08-25 11:12 _雨 阅读(172) 评论(0) 推荐(0) 编辑
上一页 1 ··· 32 33 34 35 36 37 38 39 40 ··· 71 下一页