hdu 2167 题解】的更多相关文章

题目 题意 一个数字正方形(所有数都是两位的正整数),取了一个数后,它的周围 $ 8 $ 个数都不能被选,问最大取数总和. 注意数据范围 $ 3=< n <=15 $ 我们可能一开始会去想暴力搜索,枚举状态,但很容易发现时间复杂度过高过不去,于是可以去想dp,先预处理出可行状态,然后枚举可行状态,以及行数,进行转移即可. 我们定义 $ f[i][j] $ 表示当前在第 $ i $ 行此时状态为 $ j $ 状态先处理出来这里只要存编号就好了 转移方程 $ f[i][k]=max(f[i][k]…
Pebbles HDU 2167 大意:给定一个N*N的方格,让你在里面取出一些数使其和最大,要求每一个数不能与其相邻的8个数同时取出. 思路:和炮兵阵地那一题有点像,但我们只需要考虑上一行的情况,这要简单很多,同时每一行的合法状态数量都是一样的,只需要每次读入预处理每一行每一种合法状态对应的和即可,转移方程很好写出. #include <cstdio> #include <cmath> #include <algorithm> #include <cstring…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167 思路:经典的状压dp题,前后,上下,对角8个位置不能取,状态压缩枚举即可所有情况,递推关系是为dp[i][j]=max(dp[i][j],dp[i-1][k]+sum[i][j]),具体的含义见code: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us…
题目大意:有个N*N( 3<=N<=15 )方阵, 可从中若干个数, 使其总和最大.取数要求, 当某一个数被选, 其周围8个数都不能选. 题解:记s数组为合法状态,即没有相邻的数字同时被选的二进制数,sum[i][j]表示第i行j状态下数字总和,那么Dp时只要枚举上一行的状态,判断是否可行,就可以转移出这一行每种合法状态的最优解. #include <cstdio> #include <cstring> #include <algotithm> #defin…
我想说这道题我还没弄明白我错哪了,交了20多遍一直都是Runtime Error,改了N次还是不对,后来搜了一下,说是数组开小了,又把数组开大,还不对,又改发现一个平均值求错,再改,还不对,洗洗睡吧.上午用了多个测试样例,结果第对的,可还是Runtime Error,于是就搜了一个跟自己差不多的代码,发现方法一样,输出有点差别,改完后就AC,难道真是输出错了,还是for循环多了?等我想明白了再说吧-- 题意:给出N个同学(N<=50),M(M<=5)门课程的成绩,求每个学生的平均成绩和每门课的…
题目链接:Pebbles Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1504    Accepted Submission(s): 865 Problem Description You're given an unlimited number of pebbles to distribute across an N x N gam…
网赛的时候看了这道题,发现就是平常的那种基础搜索题. 由于加了一个特殊条件:可以一次消耗3秒或原地停留1秒. 那就不能使用简单的队列了,需要使用优先队列才行. 题意 告诉一副地图:一个起点,一个终点,若干墙,若干监视器,剩下的是空地. 起点,终点,监视器都算空地. 监视器初始值会指定一个方向,共有四个方向. 监视器每秒顺时针转动到下个方向. 监视器视野距离为2. 在监视器的位置或在监视器面向的格子是监视区域. 普通的移动一格需要消耗1秒时间. 在监视器下移动一格需要消耗3秒时间. 如果呆在原地不…
第一眼看到这题,哇,这不是我刚做完的题吗?大水题!然后 这题表面很水,实际上有点坑. 题意 求经过 $ 1 - n $(不能遗漏) 并且回到 $ 1 $ 的最短路. 在看这题之前我们可以来看下这题 最短Hamilton路 这道题的要求是我们要让每个点不重不漏的经过并且最终到达 $ n-1 $ 我们看数据范围,就可以直接状压dp,枚举状态. 由于题目已经给出最短路,便可以直接计算 #include<bits/stdc++.h> using namespace std; int n,a[30][3…
题面: 最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description 给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …, Nj },其中 1 <= i <= j <= K.最大连续子序列是所有连续子序列中元素和最大的一个, 例如给定序列{ -2, 11, -4, 13, -5,…
题目链接 HDU - 5970 分析 很显然\(f(x,y)\)与\(f(x+y*k,y)\)的结果相同,因为它们在第一次取模后会变成相同的式子 我们再看一下数据的范围,突破口肯定在\(m\)那里 那么我们就可以从m开始枚举,对于每一个m,我们分别求出模\(m\)等于\(0,1,2......m-1\)的\(f\)值 那么我们就可以把所有模\(m\)的值相同的数放在一起单独处理 对于每一个单独处理的数列,我们不能简单地进行求和处理,因为会涉及到向下取整的操作 其实,我们再推算一下,\(f(i,j…