nyoj
文章平均质量分 60
BIGKAKA
What they have done? What are you doing?
展开
-
nyoj232 How to eat more Banana (LIS变形)
刚开始我以为知道题始背包问题,可是后来不知怎么存储有效的数据,忍不住(唉,每次都这样,十几分钟想不出来就想看题解了,这就是现在为什么我还是那么菜的原因之一)看了题解,其实就是LIS(最长上升序列)变形。一个突破口就是把每个长方体的三种情况都列入数列中,在按照长宽从小到大排序,在套LIS的方法,但不是自己完全写出来的,唉~~~#include #include #include原创 2016-01-23 00:43:45 · 514 阅读 · 0 评论 -
nyoj246 Human Gene Functions(LCS变形)
花了两个多小时才把这道水题A了,不过1A还是值得开心的这道题就是LCS的变形,不过验证转移方程花了好久,还是多得练习,特别是代码,其实很多时候有想法但是不知怎么用代码实现。。。转移方程:dp(i,j)=max(dp(i-1,j)+s[i], dp(i,j-1)+s[j], dp(i-1,j-1)+s(i,j) )其中dp(i,j)表示s1的前i个和s2的前j个匹配原创 2016-01-23 15:26:50 · 405 阅读 · 0 评论 -
nyoj456 邮票分你一半(01背包)
很显然的01背包问题,但是想的方向不对,半天都写不出转移方程,发现越做题越显得自己脑残~~~这题的重点把两堆邮票看成两个容器,而我一直做成两堆弄得很烦,其实就是把n个物品放到sum/2里的最大值,开始没想到,想一下才觉得这个方案是成立的,因为当一堆装得越多,另一堆也会越接近总数的一般,这样就可以经典的01背包问题了,但是我做了二维的超空间了,要做成一维的,久没看背包也忘了一维怎么写了,原创 2016-01-23 20:47:59 · 508 阅读 · 0 评论 -
nyoj571 整数划分(三)
这道题吃了翔,尼玛有没说多case。。。通过这道题,初步了解了整数划分的经典问题,值得。一 求将n划分为若干正整数之和的划分数 1. 若划分的多个整数可以相同 设dp[i][j]为将i划分为不大于j的划分数 (1) 当i时,i不能划分为大于i的数,所以dp[i][j]=dp[i][i]; (2) 当i>j 时,可以根据划分中是否转载 2016-01-24 19:46:19 · 1080 阅读 · 0 评论 -
nyoj61 传纸条(一) (双线dp)
初次学双进程dp,其实就是多维dp,但是就是多一维我的脑子就转不过来了,模模糊糊看得懂而已,从矩阵的左上角(1,1)点到矩阵的右下角(m,n)点找到两条不相交的路径使其值最大,题中是从(1,1)到(m,n)走一次,再从(m,n)到(1,1)走一次,我们可以等价变形一下,变为:同时从(1,1)走向(m,n)找两条路,且这两条路不相交,同时走!假设有两个人在走,一个原创 2016-01-25 00:31:26 · 708 阅读 · 0 评论 -
nyoj 魔法少女(简单dp)
dp(i,0)=min{dp(i-1,1),dp(i-1,0)}+a[i];dp(i,1)=min{dp(i-1,0),dp(i-1,1)};0表示在第i层不飞,1表示在第i层飞,当不飞时,上一层可以飞或者不飞;当飞时,上一层或上两层肯定不飞才能满足条件,感觉自己弱爆了~~自己写出来的还是不是很熟悉~~#include #include using namespace std;原创 2016-03-06 00:57:43 · 701 阅读 · 0 评论 -
nyoj ones
想的时候还是要很久。。。dp[i]=min(dp[i-1]+1,dp[k]+dp[i/k]);(2#include #include #include using namespace std;#define N 10001int dp[N];int n;int main(){ for(int i=1;i<6;i++) dp[i]=i; for原创 2016-03-06 01:15:56 · 368 阅读 · 0 评论 -
nyoj 首尾相连数组的最大子数组和
这道题如果按照O(n*n)的复杂度写会TLE。。。所以需要转化思想,其中有两种方法,可是我一种都没想到。法一:构造虚假数列,即复制一遍数组放置于原数组后面,这样就可以看成求首尾不连接的最大和,但是有限制条件。第一,最大子和的首位位置在1~n中,不能超出n。第二,最大和的长度不能超过n。按照求最大和的方法再加上两个限制条件,但是写起来有点nan~~(对我来说)#include #i原创 2016-03-07 20:02:43 · 584 阅读 · 0 评论 -
nyoj 飞翔d
想不到可以转化为最长递增子序列。。。因为每走一步都是往上走,所以求出一段最长的斜路即使最短路径。#include #include #include #include using namespace std;#define N 1000005#define inf -999999struct node{ int x,y;} s[N];int dp[N],n,m;原创 2016-03-07 21:24:04 · 346 阅读 · 0 评论