上一页 1 ··· 3 4 5 6 7 8 下一页
摘要: 啊!蛋都碎了..输入1的时候,貌似进入了死循环,一直TLE,害得我绞尽脑汁的想该怎么剪枝..又是一道对层数进行限制的dfs,这种dfs好怪,思路是bfs嘛View Code #include <stdio.h>#include <string.h>int n,depth,vis[105],ans[105];int dfs(int k,int a){ int i; if (depth==k) { if(a==n)return 1; return 0; } for (i=k;i>=0;i--) { a+=ans[i]; ... 阅读全文
posted @ 2011-10-26 10:55 104_gogo 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 每次看到动态转移方程就瞬间顿悟,哎,伤不起啊~定义dp[i][j],第i个数字是jdp[i][j]=dp[i-1][j-1]+dp[i-1][j]+dp[i-1][j+1];View Code #include <stdio.h>int main(){ int k,n,i,j; double dp[105][15],a,b; while (scanf("%d%d",&k,&n)!=EOF) { if(k==0) { printf("100.00000\n"); continue; } ... 阅读全文
posted @ 2011-10-26 09:34 104_gogo 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 第一次,裸奔了下,果断TLE..第二次,加了个剪枝,第一行的数不需要移动,移了也是重复的,这是我把3*3那个例子写了下发现的,没证明..300+ms第三次,也许加到前面某一行时,max就大于了min,就不需要继续搜到n行去了..63msView Code #include <stdio.h>int ar[8][8],sum[8],min,n;int judge(){ int i,max=0; for (i=0;i<n;i++) if(max<sum[i])max=sum[i]; if(max>min)return 0; return 1;}void dfs... 阅读全文
posted @ 2011-10-25 23:28 104_gogo 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 水~但是很阴险。View Code #include <stdio.h>int n,m,vis[15];int ar[]={1,1,2,6,24,120,720,5040,40320,362880};int dfs(int i,int data){ int j; if(data>n)return 0; if(data==n)return 1; for (j=i;j<=9;j++) { if(!vis[j]) { vis[j]=1; if(dfs(j+1,data+ar[j]))return 1... 阅读全文
posted @ 2011-10-25 14:40 104_gogo 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 对x,y坐标分别排下序就好了View Code 1 #include <iostream> 2 #include <algorithm> 3 4 using namespace std; 5 6 struct node{ 7 int x,y; 8 }ar[10005]; 9 int n;10 11 int cmp_X(node a,node b)12 {13 return a.x>b.x;14 }15 16 int cmp_Y(node a,node b)17 {18 return a.y>b.y;19 }20 21 int solve_X()22 {23 阅读全文
posted @ 2011-10-24 22:21 104_gogo 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 英语题丫..题意:有n个人给m道题作评价,按分数高低来判断它们的难度问:哪些题"very simple"?"very simple"的条件:不能有人觉得它最难,而且要有一半多的人觉得它最简单.注意:都不符合的时候输出0.View Code 1 #include <stdio.h> 2 #include <string.h> 3 4 int main() 5 { 6 int n,m,i,j; 7 int min[105],max[105],fen[105][105]; 8 while (scanf("%d%d", 阅读全文
posted @ 2011-10-24 19:59 104_gogo 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 问:一串数字经过多少次映射能变回自己?例:4,1,5,2,3->2,4,3,1,5->1,2,5,4,3->4,1,3,2,5->2,4,5,1,3->1,2,3,4,5->4,1,5,2,3 要经过6次映射能变回4,1,5,2,3可以看出,“4”只需要经过3次就变回“4”了,“5”只需要2次,而“4,5”要同时变回去的话,就需要(2,3)的最小公倍数次,6次。#include <stdio.h>int gcd(int a,int b){ return b?gcd(b,a%b):a;}int lcm(int a,int b){ return a/ 阅读全文
posted @ 2011-10-24 12:10 104_gogo 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 从下午比赛加写这道题写到现在,实在是眼冒金星了,特别是这道题,把我写惨了,一个小错找了半天啊,半天..而且,代码写的好烂..#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int n,m,a,b,flag,k;int on[105],off[105],lamp[105];struct node{ char s[105];}keep[100];int cmp(node ar,node br){ return strcmp(ar.s,br.s)<0;} 阅读全文
posted @ 2011-10-22 23:02 104_gogo 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 题目大意就是给出一个M,求比M大得最小的一个“循环数”例如:81362如果你从最左边的数字开始 ( 在这个例子中是8) 数最左边这个数字个数字到右边(回到最左边如果数到了最右边),你会停止在另一个新的数字(如果没有停在一个不同的数字上,这个数就不是循环数). 就像: 8 1 3 6 2 从最左边接下去数8个数字: 1 3 6 2 8 1 3 6 所以下一个数字是6重复这样做 (这次从“6”开始数6个数字) 并且你会停止在一个新的数字上: 2 8 1 3 6 2, 也就是2.再这样做 (这次数两个): 8 1再一次 (这次一个): 3又一次: 6 2 8 这是你回到了起点, 在从每一个数字开始数 阅读全文
posted @ 2011-10-22 19:45 104_gogo 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 按行搜,当到第i行时,判断对它选还是不选下面两种dfs是一样的#include <stdio.h>#include <string.h>int n,m,vis[305],ar[20][305];int match(){ int i; for (i=0;i<m;i++) { if(vis[i]!=1)return 0; } return 1;}int judge(){ int i; for (i=0;i<m;i++) { if(vis[i]>1)return 0; } return 1;}int dfs(int i){ int j,k; if (matc 阅读全文
posted @ 2011-10-22 12:38 104_gogo 阅读(244) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 下一页