上一页 1 2 3 4 5 6 7 ··· 9 下一页
摘要: 题意:第一行数字是邮票的面值,每一个数字就是一个不同的种类,哪怕面值相同。第二行数字是顾客所需要的邮票总面值。每个数字就是一个顾客的需求。顾客是集邮爱好者,所以必须尽可能的给他不同种类的邮票。但是一位顾客最多只能拿4张邮票。满足顾客需求的解就是可行解。邮票种类最多的可行解为最优。如果存在两个以上的最优解的邮票种类是一样的,张数最少的更优张数也一样的话,这些最优解中最大面值较大的更优。若邮票种类、张数、最大面值三者都分别相同,则认为这些最优解相同,输出tie。没有解就是none。分析:1、最多拿四张邮票,如果同一面值的邮票种类超过5,以5计算。为什么不以4计算呢,因为tie。2、若DFS的深度超 阅读全文
posted @ 2013-06-20 19:30 心向往之 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 题意:游戏 http://www.hacker.org/push棋盘上有几个箱子,可以找个空地,放置'推子'。然后横向或竖向推动,直到遇到箱子,将箱子数减1,推到下一格,若下一格也有箱子,则两者相加。 推子在第一个箱子的原位置。 推子和箱子之间至少有一个空格才能撞动箱子。分析:深搜。找到任意一种解决方案即可。 注意: 一开始放推子的时候,只能放在空地上。 这点没注意到卡了N小时。char c[30][30];int a[30][30];int n,m,count,flag;int dir[2][4]={{ -1, 1, 0, 0 }, { 0, 0,-1, 1 ... 阅读全文
posted @ 2013-06-20 13:48 心向往之 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 1429题意:这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在地牢另外的某些地方。刚开始Ignatius被关在(sx,sy)的位置,离开地牢的门在(ex,ey)的位置。Ignatius每分钟只能从一个坐标走到相邻四个坐标中的其中一个。魔王每t分钟回地牢视察一次,若发现Ignatius不在原位置便把他拎回去。经过若干次的尝试,Ignatius已画出整个地牢的地图。现在请你帮他计算能否再次成功逃亡。只要在魔王下次视察之前走到出口就算离开地牢,如果魔王回来的时候刚好走到出口或还未到出口都算逃亡失败。分析:用b[x][y][s]代表在x,y 阅读全文
posted @ 2013-06-20 13:42 心向往之 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 题意:密码是一个C进制的数,并且只能由给定的M个数字构成,同时密码是一个给定十进制整数N (0<=N<=5000)的正整数倍(如果存在多个满足条件的数,那么最小的那个就是密码), 最多只能保存500位密码.因此如果得到的密码长度大于500也不能用来开启房门,这种情况也被认为密码不存在.分析:广搜, 结构体记录 密码下标、前驱、余数、长度。每次(余数*进制+新数)%N 求得新的余数,若为0,则找到密码,若超过500位,则无解。余数如果以前出现过,则舍弃。bool b[15010];char c[20];int a[20];int T,N,C,M,p;struct node{ i... 阅读全文
posted @ 2013-06-20 13:39 心向往之 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个n*m的棋盘,其中某些格子已被染色,现在要对剩余格子黑白染色,且满足:1、黑白格子分别连通;2、不存在2*2的单色正方形;求方案数和任意一种方案;以黑色为例转移如下:If 左黑 && 上黑 Then 合并两个连通块Else If 左白 && 上白 Then 形成新的连通块Else If 左黑 && 上白 Then 和左边的合并Else If 左白 && 上黑 Then 和上边的合并If 左黑 && 上黑 && 左上黑 Then 形成2x2的格子,非法If 最后一格 && 阅读全文
posted @ 2013-06-19 14:16 心向往之 阅读(508) 评论(0) 推荐(0) 编辑
摘要: 题意:用1*2的矩形,覆盖m*n的大矩形,问有多少种情况。long long dp[30][1<<12],b[30][1<<12],width,height; //用int出错long long solve(int i,int j,int pos,int state){ //第i行初始状态为j if(b[i][state])return dp[i][state]; if(pos==width){ if(i<=height){ int s=~j&((1<<width)-1); dp[i][state]+=solve(... 阅读全文
posted @ 2013-06-19 14:13 心向往之 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 题意:给一棵树,以及边上的权值,求每个结点到其它结点的最大权值分析:两次DFS第一次由底向上确定每个结点到叶子结点的最大权值第二次由上到下确定每个结点经过父结点的最大权值,并确定最终答案const int MaxN=10005;int a[MaxN][300], v[MaxN][300], p[MaxN];int succ[MaxN], pred[MaxN], ans[MaxN];int dfs1(int x){ if(p[x]){ FOR(i, 0, p[x]) { int temp = v[x][i] + dfs1(a[x][i]); ... 阅读全文
posted @ 2013-06-19 14:06 心向往之 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 题意:求最长的子序列 使 m <= 最大值-最小值 <= k分析:两个单调队列,一增一减,当 max-min>k 时,队首元素出队,当 max-min<m 时,不必出队,因为后来加入的元素可能使差值变大,但不可能使差值变小const int maxn=100005;int mi,ma;struct que{ int ans,pre; int a[maxn], pa[maxn], la, ra; int b[maxn], pb[maxn], lb, rb; void init(){ la=lb=1; ra=rb=0; pre=0; ans=0;} void ins(... 阅读全文
posted @ 2013-06-19 14:00 心向往之 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 题意:给定每天的股票买进上限,买进价格,卖出上限,卖出价格,每两次买卖操作中间必须间隔w天,每天最多持有maxp个股票,问n天后最大收益是多少分析:dp[i][j]表示第i天有j个股票的最大收益令 pre = i-w-1dp[i][j]=max dp[i-1][j] //不买不卖 dp[pre][k] - (j-k)*buy[i] //买j-k个 dp[pre][k] + (k-j)*sell[i] //卖k-j个即 dp[i][j] + j*buy[i] = max ( dp[pre][k] + k*buy[i] ) ( j-k <= buyn ) dp[i][j] ... 阅读全文
posted @ 2013-06-19 13:57 心向往之 阅读(226) 评论(0) 推荐(0) 编辑
摘要: fzu 1977 格子分三种:不能走,可走可不走,一定要走。求单回路条数。如果左上插头都为0 并且此格子可以不走 直接将状态加入到hash表中。记录最后一个必须走的格子 此后如果有回路形成 加入到结果。有回路形成 left=1 up=2 并且其它位置要全为0 为此WA了一晚上。。另外 若plugDP最后return dp[0] 测试数据又无解 应写成if(src->sz==0) return 0; return src->dp[0]-2;int M[15];const int HSize = 12397;int n , m , nn , mm ;int maze[15][15];i 阅读全文
posted @ 2013-06-19 13:48 心向往之 阅读(274) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 9 下一页