摘要: 题目大意:给定一个N*N的方格,让你在里面取出一些数使其和最大,要求每一个数不能与其相邻的8个数同时取出~~很明显的二进制 状态压缩DP~~先求出每一行有效的状态(即不能同时取出相邻的两个)有1597种,我第一次就根据这直接进行了DP,DP[i][j]=max(DP[i-1][h])+sum(j);DP[i][j]表示第i行的第j种状态,DP[i-1][h]表示第i-1行的第h中状态,sum(j)表示第i行在j状态下取出的数之和!此时j和h要满足一定的条件。j中的每一个1不能与h中每一个1相邻,或对角相邻!不过这样做,最后超时了。。我想了一下,感觉每一行要进行1600*1600次循环外加一些判 阅读全文
posted @ 2011-07-31 15:30 奋斗青春 阅读(754) 评论(0) 推荐(1) 编辑
摘要: 一道搜索题,不过用了一个visit数组比较重要~~值得学习!!题目大意:给3个字符串,问第三个串能不能由前两个构成,在不改变相互顺序的情况下!visit标记数组很重要,去掉must超时~~直接贴代码,代码很精简:View Code 1 # include<stdio.h> 2 # include<string.h> 3 char str1[205],str2[205],str[405],flag,visit[205][205]; 4 void dfs(int i,int j,int k) 5 { 6 if(str[i]==0 && str1[j]==0 阅读全文
posted @ 2011-07-31 09:02 奋斗青春 阅读(1162) 评论(0) 推荐(2) 编辑