上一页 1 2 3 4 5 6 7 8 9 ··· 30 下一页
摘要: 思路:为了方便,当c1>c2时将0变为1,1变为0.空格最多有10个,每个空格有3个状态,如果不状态压缩,会TLE的。所以最多有3^10种情况代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define inf 1mm; 21 bool vis[9][9]; 22 void dfs(int x,int y) 23 { 24 if(vis[x][y]) return ; 25 vis[x][y]=1; 26 s... 阅读全文
posted @ 2013-09-20 19:21 _随心所欲_ 阅读(451) 评论(0) 推荐(0) 编辑
摘要: 思路:用极大极小搜索解决这样的问题很方便!!代码如下: 1 #include 2 #include 3 #define inf 100000000 4 using namespace std; 5 char str[4][5]; 6 int x,y,num; 7 bool ok(int x,int y) //判断是否胜 8 { 9 int i; 10 for(i=0;i=mi) return ma; 46 } 47 return ma; 48 } 49 int minimax(int x,int y,int ma) 50 {... 阅读全文
posted @ 2013-09-20 12:02 _随心所欲_ 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 思路:总共有18条边,9个三角形。极大极小化搜索+剪枝比较慢,所以用记忆化搜索!!用state存放当前的加边后的状态,并判断是否构成三角形,找出最优解。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define inf 10?"A wins.":"B wins.");75 }76 return 0;77 }View Code 阅读全文
posted @ 2013-09-18 10:33 _随心所欲_ 阅读(619) 评论(0) 推荐(0) 编辑
摘要: 数位DP!dp[i][j][k]:第i位数,状态为j,长度为k代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 using namespace std;10 ll dp[20][1025][11];11 int bit[20],k;12 int Getlen (int sta)//求出最长上升子序列的长度13 {14 int ret = 0;15 while (sta)16 {17 ret +=... 阅读全文
posted @ 2013-09-16 22:18 _随心所欲_ 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 思路:分析知道sum(1,i) (1 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 using namespace std;10 int a[200002],p[200002],mp[200002];11 int main()12 {13 int n,cnt;14 while(scanf("%d",&n)&&n){15 for(int i=1;ipre){29 ... 阅读全文
posted @ 2013-09-16 20:33 _随心所欲_ 阅读(2354) 评论(7) 推荐(8) 编辑
摘要: 思路:求最长回文子串的长度!代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 int s[3001],dp[3001][3001]; 9 int dfs(int p,int q)10 {11 if(dp[p][q]!=-1) return dp[p][q];12 if(p>q) return dp[p][q]=0;13 dp[p][q]=max(dfs(p+1,q),dfs(p,q-1));14 if(s... 阅读全文
posted @ 2013-09-16 12:16 _随心所欲_ 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 一个简单的搜索题,唉……当时脑子抽了,没做出来啊……代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 struct node10 {11 int x,y;12 }p[30];13 int ans,now,n;14 bool f[30];15 void dfs(int m)16 {17 if(m>=n){18 if(now>ans) ans=now;19 ret... 阅读全文
posted @ 2013-09-16 10:20 _随心所欲_ 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 直接贴模版!!!求异面直线的距离及坐标!!代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define I(p) scanf("%lf%lf%lf",&p.x,&p.y,&p.z) 9 #define eps 1e-20 10 #define zero(x) (((x)>0?(x):-(x))eps){239 ret.x+=(u.b.x-u.a.x)*t;240 241 ret.y+=(u.b.y-u.a.y)*t;242 阅读全文
posted @ 2013-09-15 20:45 _随心所欲_ 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 思路:搜索的时候是从高位到低位,所以一旦遇到非0数字,也就确定了数的长度,这样就知道回文串的中心点。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #define ll long long 8 using namespace std; 9 ll dp[20][20][2];10 int bit[20],num[20];11 ll dfs(int pos,int m,int s,bool f)12 {13 if(!pos) return 1;14 if(!f&&dp[pos][m] 阅读全文
posted @ 2013-09-13 21:25 _随心所欲_ 阅读(461) 评论(0) 推荐(0) 编辑
摘要: 思路:典型的数位DP!!!dp[i][j][k]:第i位,对mod取余为j,数字和对mod取余为k。注意:由于32位数字和小于95,所以当k>=95时,结果肯定为0.这样数组就可以开小点,不会超内存!!代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 int dp[11][95][95],bit[11],k; 9 int dfs(int pos,int m,int s,bool f)10 {11 if(pos==-1) return !m& 阅读全文
posted @ 2013-09-13 20:35 _随心所欲_ 阅读(253) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 30 下一页