- 博客(27)
- 资源 (1)
- 收藏
- 关注
原创 poj解题报告——2014
题意,将矩形放到框里(框的最大宽度给出),放不下,就放下一行。注意这里不能旋转,这也就成为水题模拟题的原因,也不让求最大最小,就是模拟最终的状态。不能旋转,直接放。代码如下#includeint max(int a,int b){ return a>b?a:b;}void main(){ int m,w,h; int wnow=0,hnow=0,wmax=0,hmax=
2015-02-28 12:01:31 465
原创 poj解题报告——1914
这就是一道简单的线性代数问题,三阶矩阵求值。代码如下#include#include__int64 a[3][3],b[3],c[3][3];__int64 cal(){ return a[0][0]*(a[1][1]*a[2][2]-a[1][2]*a[2][1]) -a[0][1]*(a[1][0]*a[2][2]-a[1][2]*a[2][0]) +a[0][2
2015-02-27 15:17:49 427
原创 poj解题报告——1014
题意: 有分别价值为1,2,3,4,5,6的6种物品,输入6个数字,表示相应价值的物品的数量,问一下能不能将物品分成两份,是两份的总价值相等,其中一个物品不能切开,只能分给其中的某一方,当输入六个0是(即没有物品),这程序结束,总物品的总个数不超过20000代码如下#include#includeint a[7],sum,b[100],n;int dp[60001];void
2015-02-26 12:42:33 523
原创 poj解题报告——1088
思路:用一个二维数组arr来保存滑雪场地的地形图,再用另外一个二维数dp[i][j]来记录从图中某一个点的位置开始向四周延伸所能达到的最大深度。对于每一个点都从上下左右四个方向来搜索,如果有比当前点高度低的位置,那么就沿着个方向搜下去,依次再向其它方向搜索,最后比较四个方向上搜索到的深度取最大的然后+1后赋给当前位置的dp[i][j];公式就是dp[i][j]=max{dp[i-1][j],dp[
2015-02-25 11:49:15 424
原创 poj解题报告——3034
题意:在一个n*n的矩阵中,每个(x,y)坐标有个洞,在任意时刻(从上一时刻开始到目前时刻结束),任意位置可能会探出一个鼹鼠的头,如果用锤子打中即得一分,锤子活动的范围是以d(1=<d<=5)为半径的圆中可到达的坐标点,并且是直线移动,锤子可以移动到任意位置,同一时间同一 地点不可能出现两只鼹鼠,给出 鼹鼠这一局的出现方式,求出最多可以得多少分。 题解:动态规划,最优结果由子问题的
2015-02-24 14:38:17 510
原创 poj解题报告——1925
题意:给定n个塔的横坐标和高度,保证高度各不相同且横坐标递增,蜘蛛侠可以向一个塔射蛛丝然后荡到当前的相对位置,求最少要用多少次蛛丝。 分析:dp[i]代表着当他到x轴i的位置时最少摇摆了几次。因为每次摇摆他都到了关于被他蛛网固定的建筑的对称位置。那么他的高度在每次切换建筑目标时都是不变的。代码如下#include#include#includeint min(i
2015-02-23 08:44:57 550
原创 poj解题报告——2948
题意:一个row*col的矩阵,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少。如图,最北边有bloggium的收集站,最西边有 yeyenum 的收集站。现在要你在这些格子上面安装向北或者向西的传送带(每个格子自能装一种)。问最多能采到多少矿(yeyenum+bloggium)? 分析:每个格子只能向西或者向北,某个格子假如被选定向西,那么它所在
2015-02-22 11:45:04 510
原创 poj解题报告——2029
题目大意:给出w为宽,h为高的一个长方形,里面有n个点,给出每个点的坐标,最后给出s为宽,t为高的一个长方形,问用这个长方形最多可以围住多少个点。数据范围很小,可以直接计算map[i][j]记录从(1,1)到(i,j)的长方形中的点数。map[i][j] - map[i-t][j] - map[i][j-s] + map[i-t][j-s]得到一个端点为ij的小长方形,找出所有长方形的最大值。
2015-02-21 21:18:14 503
原创 poj解题报告——3280
题意:给你一串字符,通过添加删除其中的一部分,使其变成一个回文串,并且花费最小(添加删除都有权值) 分析:删除一个字符和添加一个字符是等价的,考虑最小即可,设dp[i][j]表示在区间i j范围内构成回文的最小花费,if 当前匹配的两个字符相等,str[i] == str[j] 那么dp[i][j] = dp[i+1][j-1];else则把左边添加删除一个右边的值 或者在右
2015-02-20 08:52:58 410
原创 poj解题报告——2528
题意:有一面墙,被等分为1千万份,一份的宽度为一个单位宽度。现在往墙上贴N张海报,每张海报的宽度是任意的,但是必定是单位宽度的整数倍,且 解法:线段树+离散化 有一条1到10的数轴(长度为9),给定4个区间[2,4] [3,6] [8,10] [6,9],覆盖关系就是后者覆盖前者,每个区间染色依次为 1 2 3 4。 现在我们抽取这4个区间的8
2015-02-18 16:55:00 479
原创 poj解题报告——1191
这题动态规划,太难了,参考了别人的思路,写了这份报告。 分析一下,根据题意,要求均方差ans = sqrt(Sum((x[i]-x的平均值)^2)/n),ans^2=Sum(x[i]*x[i])/n-(x的平均值)^2,而x的平均值是固定值(即所有方格数字的和/n),所以只要使得切割后的矩形的总分的平方和尽量小,由于切割只能沿着棋盘的边进行,故对于左上角坐标为[x1,y1],右下
2015-02-17 14:45:52 418
原创 poj解题报告——1850
这其实算是递推数学,组合只是占了一部分,先是打表了一个杨辉三角,通过字母排列的方式及个数再加和。代码如下#include#includeint c[27][27]={0};void playtable(){ int i,j; for(i=0;i<=26;i++) { for(j=0;j<=i;j++) { if(!j||i==j) c[i][j]=1
2015-02-16 13:33:07 401
原创 poj解题报告——1159
做这题的时候网上荡了个公式:最少需要补充的字母数=原序列S的长度—S和S'的最长公共子串长度//其中s'为s的逆序。不要问我为什么,我也不知道是为什么。大神们没说,我还要再想想。代码如下#include#includevoid main(){ char a[5005],b[5005]; int c[2][5005]; int n,i,j; scanf("%d",&n);
2015-02-15 12:27:13 488
原创 poj解题报告——1080
这种题目总是要先打表,再化归,dp问题,取最大。代码如下#include#include#define N 1005int dp[N][N];int score[200][200];int max(int a,int b){ return a>b?a:b;}void init() { score['A']['A']=score['C']['C']=score['G
2015-02-14 14:25:09 410
原创 poj解题报告——3176
这题是一个简单的dp问题,暴力求解。代码如下#includeint dp[352][352];int dat[352][352];int max(int x,int y){ return x>y?x:y;}void main(){ int i,j,n,t; scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=i;j+
2015-02-13 11:40:36 371
原创 poj解题报告——2533
这题是最长上升子序列,去年暑假集训的时候老师讲过这种题的算法,这回算是练练手吧。代码如下#includevoid main(){ int a[1005],b[1005],i,j,n,max; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); b[i]=1; } for(i=0;i<n;i++) {
2015-02-12 11:46:57 355
原创 poj解题报告——1260
本题四个着眼点 (1) 要求要买的珍珠的数量是一定的 (2)所买的珍珠的质量允许提高,但不允许下降 (3)输入时,后输入的珍珠价格一定比前面输入的要贵 (4) 由(2)(3)知,珍珠的替代必须是连续的,不能跳跃替代代码如下#include#includeint min(int x,int y){ return x<y?x:
2015-02-11 10:26:32 395
原创 poj解题报告——1836
这题要求最长上升子序列和最长下降子序列,除了最高的部分能出现等高,其他部分不行。代码如下#include#includevoid main(){ int n,i,j,result,m,up[1005],down[1005]; double a[1005]; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { sca
2015-02-10 16:00:03 365
原创 poj解题报告——3122
题意是要公平地把pie分给每一个人(就是所有人得到的pie尺寸一致,但是形状可以不同),而且每个人得到的那份pie必须是从同一个pie上得到的。 值得注意的是自己要算进去,也就是f+1,我WA了两次的原因是exp选太小了1e-12,其实1e-7就够了。代码如下#include#include#define Pi asin(1.0)*2#define exp 1e
2015-02-09 12:30:20 443
原创 poj解题报告——1905
这就是应该算是数学题,光是公式代换就用了好久,二分只是为了凑值用的。代码如下#include#include#includevoid main(){ double l,ll,right,left,mid,n,c; while(scanf("%lf%lf%lf",&l,&n,&c)!=EOF) { if(l<0&&n<0&&c<0)
2015-02-08 15:08:54 477
原创 poj解题报告——3258
题意:一些石头排成一条线,第一个和最后一个不能去掉,其余的共可以去掉m块,要使去掉后石头间距的最小值最大。 这种数学题理解起来真不容易,不过想好了算法就好做了。代码如下#include#includeint a[50005];int b[50005];int cmp(const void *a,const void *b){ return *(int *)
2015-02-07 12:21:49 391
原创 poj解题报告——3273
给出一个大小为N的数组,将其分为M块,让每块数字之和的最大值尽量小。右边界是将整个数组当做一块,那么最大值就是所有数字之和;左边界是将整个数组分成N块,那么和的最大值就是数组元素中的最大值。其实,当给出一个答案后,从数组首元素开始叠加,超出答案那么分块数加1,这么遍历一遍后,要是分块数小于M,说明答案给的大了,反之答案给小了。代码如下#include#include#defin
2015-02-06 11:11:36 455
原创 poj解题报告——1129
这题可以划归成四色原理的题目,着色问题其实就是一个简单的暴力深搜,化成0-1矩阵是我觉得比较好的方法。代码如下#include#include#define M 26int n,ans,color[M]; int map[M][M],isFind;int ok(int x,int c){ int i; for(i=0;i<n;i++) if(map[x][i]&&c
2015-02-05 14:03:27 471
原创 poj解题报告——2676
这题是数独游戏,直接暴力深搜吧代码如下#includeint sign;int num[9][9];void Input(){ int i,j; for(i=0;i<9;i++) for(j=0;j<9;j++) scanf("%1d",&num[i][j]);}void Output(){ int i,j;
2015-02-04 12:29:48 459
原创 poj解题报告——1416
题意:公司现在要发明一种新的碎纸机,要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值。比如,target的值是50,而纸条上的数字是12346,应该把数字切成四部分,分别是1、2、34、6。因为这样所得到的和43 (= 1 + 2 + 34 + 6) 是所有可能中最接近而不超过50的。(比如1, 23, 4, 和6 就不可以,因为它们的和不如43接近50,而12, 34, 6也不可
2015-02-03 18:35:48 469
原创 poj解题报告——2531
题意:给定无向图,将顶点分成两个集合,使得两个集合间的所有边权最大。代码如下#includeint c[22][22],n,ans,set[22];void DFS(int id,int sum){ int i,t; set[id]=1; for(i=0;i { if(set[i]==1)
2015-02-03 17:55:57 502
原创 poj解题报告——3349
2月1日第一题,也是我寒假第一题。 这题分类是用哈希表做,一开始我都不知道什么是哈希表,摸索了许久,参考了别人的代码,写下了这个。 题意:每个雪花都有六个分支,用六个整数代表,这六个整数是从任意一个分支开始,朝顺时针或逆时针方向遍历得到的。输入多个雪花,判断是否有形状一致的雪花存在。简单的数字哈希,每种雪花可以由多种数字组合表示。例如输入的是1 2 3 4 5
2015-02-01 11:12:32 392
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人