自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Neutralzz的博客

我有自己的梦想和追求!

  • 博客(21)
  • 收藏
  • 关注

原创 LightOJ 1352 Strange Summation(找规律or数位DP)

解析:将[l,r]的所有二进制数字左对齐后做不进位的加法运算后的值(注意是不进位!写一下找找规律就好。[code]:#include#includeusing namespace std;typedef unsigned long long LL;LL num[70];int top;void sol(LL n,int p){//printf("-> %llu

2016-04-24 23:20:13 596

原创 LightOJ 1364 Expected Cards (概率DP)

解析:设dp[c][d][h][s][i][j]为有c,d,h,s个对应的牌,i、j记录大小王的状态。记忆化搜索一下就ok[code]:#include#include#includeusing namespace std;int C,D,H,S,cnt[5];double dp[15][15][15][15][5][5];void init(){ int

2016-04-24 21:31:38 1009

原创 Light OJ 1394 Disable the Wand (数位DP)

解析:dp值设为pair  同时记录个数和sum,套模板。[code]:#include#include#include#includeusing namespace std;typedef long long LL;typedef pair PLL;PLL dp[35][35][35][3][7];int s1,s2,ideal[32];int bit[35],to

2016-04-23 21:29:35 411

原创 Light OJ 1415 Save the Trees (dp+块状数组)

解析:设dp[i]为考虑前i棵树的最小收益。那么dp[i] = min(dp[j]+max(h[j+1...i]));显然不能直接状态转移,但是又想不出logn的做法,于是就套上了块状数组。[code]:#include#include#include#include#includeusing namespace std;typedef long long L

2016-04-23 10:46:09 502

原创 Light OJ 1342 - Aladdin and the Magical Sticks (概率DP)

解析:设dp[i][j]为有i个未放入的可辨别的砖块和j个未放入的不可辨别的砖块时,放入不可辨别的砖块的重量期望值。num1,tot1分别是可辨别砖块的个数和重量和;num2,tot2分别是不可辨别砖块的个数和重量和。那么dp[i][j] = (num2-j)*dp[i][j]/(i+num2) + j*dp[i][j-1]/(i+num2) + i*dp[i-1][j]/(i+num

2016-04-16 23:38:00 348

原创 Light OJ 1420 - Subsequences forming Strings (DP)

解析:设dp[i][j][k][0]为用A[1...j]和B[1...k]构成C[1...i]且最后一个字母是从A中取得的方案数。设dp[i][j][k][0]为用A[1...j]和B[1...k]构成C[1...i]且最后一个字母是从B中取得的方案数。状态转移方程: dp[i][j][k][0] = (dp[i][j-1][k][0] + (s[2][i]==s[0][j]?

2016-04-16 11:54:21 290

原创 Light OJ 1302 Independent Attacking Zones(分治或DP)

解析:对于[1...n],将第n个队伍和[1...n-1]中的两个队伍i,j构成一个三角形,那么 ans[1...n] = ans[1...i-1]*ans[i+1...j-1]*ans[j+1...n][code]:#include#include#include using namespace std;typedef long long LL; char s[75

2016-04-16 11:49:38 407

原创 Light OJ 1274 Beating the Dataset (推公式)

解析:首先算出yes的个数m首先答案要加上第一个结果是no的情况数,然后那么第i和第i+1个结果是yes no或no yes,答案就要加上对应的情况数。[code]:#include#include#include using namespace std; int n,m; int main(){ int i,j,cas; scanf("%d",&c

2016-04-16 11:44:02 482

原创 Light OJ 1299 Fantasy Cricket (DP)

参考:点击打开链接解析:dp[i][j]为前i个字符 有j个U没有确定位置的方案数。则dp[i][j] = dp[i-1][j]*j+dp[i-1][j+1]*(j+1)*(j+1)  (s[i] = 'D')dp[i][j] = dp[i-1][j-1]+dp[i-1][j]*j (s[i] = 'U')[code]:#include#include#incl

2016-04-14 19:07:51 369

原创 Light OJ 1295 Lighting System Design (DP)

解析:将灯按v排序后记录一下数量的前缀和,然后dp就好了。dp[i] = max(dp[j]+Ki+Ci*sigma(L[j+1...i]));[code]:#include#include#include#define th(x) this->x=x;using namespace std;struct Node{ int v,k,c,l;

2016-04-14 13:58:48 331

原创 Light OJ 1270 Tiles (II) (状压DP)

解析:显然的状压DP,每一行怎么填补空缺用搜索就好,就是繁琐了些。[code]:#include#include#include using namespace std;typedef unsigned long long LL; char s[105][105];int n,m,a[105],b[8],c[8],d;LL dp[105][1<<8],tmp_

2016-04-14 13:54:19 219

原创 Light OJ 1277 Looking for a Subsequence

解析:先用二分求出以a[i]为首的最长子序列长度,往后贪心着取就是了。[code]:#include#include#include#include #define pb push_backusing namespace std;const int maxn = 1e5+5;const int INF = 0x3f3f3f3f; int n,m,a[maxn],b[

2016-04-14 13:46:30 268

原创 Light OJ 1264 Grouping Friends (DP+枚举子集)

题意:将所有人分若干组,使得每组的不满意值的和最小。解析:预处理出来每个可能的组的不满意值,再枚举一下自己即可。[code]:#include#include#includeusing namespace std;const int INF = 0x3f3f3f3f;int n,d[15][15],f[1<<15],dp[1<<15];void sol(){

2016-04-05 12:24:54 388

原创 Light OJ 1252 Maintaining Communities (树形DP)

状态真是不如去年现场赛的时候了,这么一个简单的树形DP都写出了俩bug。。。解析:设dp[u][j]为维护u所在的子树,且u所在连通块的花费为j的最少连通块数目。令v是u的子节点,w为其边权若将v所在的连通块与u分离,则dp[u][j] = dp[u][j]+min(dp[v][t]) (0若将v所在的连通块与u连接,则dp[u][j] = min(dp[u][j-w-t]+d

2016-04-05 09:46:54 537

原创 Light OJ 1230 Placing Lampposts(简单树形DP)

解析:dp[u][0]在以u为根的子树中,顶点u不安装的最少安装数目;dp[u][1]在以u为根的子树中,顶点u安装的最少安装数目。则有 dp[u][0] = sigma(dp[v][1]);dp[u][1] = sigma(min(dp[v][0],dp[v][1]))。再开一个num[][2]数组记录每个状态下的两端点都安装了的边数。[code]:#include#i

2016-04-04 21:27:28 223

原创 Light OJ 1228 e-Friends (状压DP)

解析:dp[S][i][k]为队列中以有S中的人,且队尾是i,不满意的个数为k的方案数。则dp[S][i][k] = sigma(dp[S^(1[code]:#include#include#includeusing namespace std;typedef long long LL;int n,m,q,mp[12][12];LL dp[1<<12][12][12];

2016-04-04 18:51:55 227

原创 Light OJ 1223 Testing Mailboxes (DP)

解析:记忆化一下就好,整体的复杂度是小于10^8的。[code]:#include#include#includeusing namespace std;typedef long long LL;const int INF = 0x3f3f3f3f;int n,m,dp[105][105][105];void init(){ int i,l,r; mem

2016-04-04 16:57:48 245

原创 Light OJ 1194 Colored T-Shirts (状压DP)

解析:举个例子,{2 1 4 3 1 2}目标序列{* * * * * *}假设我先把数字1放入目标序列尾部则有{* * * * 1 1} 交换次数为 5+6-2-5 = 4次(序列位置和的差)然后我把数字2放入尾部则有{* * 2 2 1 1} 则是再像上面那样做差得出的是3+4-1-6 = 0显然是不对的。因为1的位置的改变使第2个2的位置左移两位,所以应该是3+4-1-4

2016-04-04 15:20:33 327

原创 Light OJ 1106 Gone Fishing (DP)

解析:由于路径的输出要求,这里使用逆推的方式更加合适。设dp[i][j]为从i开始,剩余时间为j的最大捕鱼量。枚举在第i个湖上钓鱼的时间k,则有dp[i][j] = max(dp[i+1][j-k]+k时间内能钓到的鱼的数量)[code]:#include#include#includeusing namespace std;int n,m,f[30],d[30

2016-04-04 10:46:23 311

原创 Light OJ 1180 Software Company (二分+DP)

题意:有两个任务A,B,每个任务可以分成相同且独立的m个子任务。有n个员工,第i个员工完成A的一个子任务的时间是a[i],完成B的一个子任务的时间是b[i]。求完成所有任务所需要的最短时间。解析:首先想到了二分时间,判断在规定时间内是否能完成任务。但是怎么判断,想了好久,最后还是参考了别人的想法。每一个人是独立的,每一个小任务也是独立的,对于员工i来说,可以完成x个A的任务,并完成y个B的

2016-04-03 12:55:41 372

原创 LightOJ 1173 The Vindictive Coach (DP)

解析:关于题意的理解参考:点击打开链接设dp[i][j] 为考虑前i个位置且高度小于第i个位置的人数为j的方案数。状态转移方程:dp[i][j] = i&1? sigma(dp[i-1][j-k]):sigma(dp[i-1][j+k])[code]:#include#include#includeusing namespace std;typedef uns

2016-04-02 22:59:40 393

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除