摘要: #include #include using namespace std; const int maxk = 100; const int maxa = 63; unsigned long long d[maxk+1][maxa+1]; int main() { memset(d, 0, sizeof(d)); for(int i = 1; i > k >> n && k) { ... 阅读全文
posted @ 2018-10-16 21:22 Erio 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 感觉这道题读题有点难。。似乎和现实联系的比较密切1.每个process的两个资源可以顺序反一下2.p->q,q->s不可以同时进行 p->q,p->s可以 输出最长等待链输出每个process的资源调用顺序 (注意按输入顺序输出,并不意味着按输入顺序先后执行,只是输出方便看) 把资源看成点,一个pr 阅读全文
posted @ 2018-10-16 21:21 Erio 阅读(438) 评论(1) 推荐(0) 编辑
摘要: 这道题思维很灵活。也有点套路的意思。 首先规定0,1分别按照原来的顺序接收,只是01换位。这样简化了思维。(否则并不会有更优结果它。,比较好想)最大值和最小值可以贪心得到。那么接下来就是给定一个整数P,判断能不能得到它。贪心法,从左到右判断P的每一位,从K中最左边的0或1取。这样会发现任意时刻k中已 阅读全文
posted @ 2018-10-16 21:20 Erio 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 注意这题要求互相认识不认识的人之间连一条线一个人在组1,那么不认识(互相认识)的人就在组0;同时这些人不认识的人就在组1.每个联通分量都可以独立推导,遇到矛盾则无解一个联通分量有一个核心,其他的点是分支我感觉紫书写的样例又是有点问题,应该是4在0,那么135在1,反正则反;而不是1在0,345在1然 阅读全文
posted @ 2018-10-16 21:19 Erio 阅读(246) 评论(0) 推荐(0) 编辑
摘要: fixing great wall 的变形dp(i,j,k,p)不考虑i-j的客人,还要送k个人,目前位置在p起点i和总数量k都要枚举dp(i,j,k,p)=max(dp(m,j,k-1,p)+valm,dp(i,d,k-1,p)+vald) 画一下图,就发现每个点罚时是当前k*abs【pi】 阅读全文
posted @ 2018-10-16 21:18 Erio 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 常见思路枚举最后一个方块A【j】何时消除 对于dp(i,j,k)就两种决策:转移到dp(i,p-1,0)+(j-p+1+k)^2 枚举q<p,A【q】=A【j】,A【q】!=A【q+1】,转移到d(q+1,p-1,0)+dp(i,q,j-p+k) 阅读全文
posted @ 2018-10-16 21:17 Erio 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 这道题超经典。dp和优化都值得看一看。因为i+1只和i有关,用滚动数组节省空间暑假第一次做感觉很困难,现在看就清晰了很多 阅读全文
posted @ 2018-10-16 21:16 Erio 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 按紫书来注意这道题的题目给了很大的方便,就相当于验证k是不是答案,不是的话就是k+1 阅读全文
posted @ 2018-10-16 21:13 Erio 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 我觉得这个题挺难的......首先这个题的结论 hp+kd我没有证明出来(范围肯定没有问题,根据数量少的时候和感觉就觉得是对的,但是没有严格的证明) dp[i][x]就是在dp[i-1][x-d x+d]中找一个最小值转移,再加上常数|h[i]-x|,这样就可以用优先队列来优化。虽然说是用单调队列来 阅读全文
posted @ 2018-10-16 21:12 Erio 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 用到了kase避免memset超时 阅读全文
posted @ 2018-10-16 21:10 Erio 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 更简单的做法:定义状态dp[i][j]表示在已经用了i根火柴的情况下拼出来了剩余部分(是剩余部分,不是已经拼出来了的)为j(需要%m)的最大长度,一个辅助数组p[i][j]表示状态[i][j]的最高位是往后添加kdp[i][j]=max(dp[i][j],dp[i-c[k]][(j*10+k)%m] 阅读全文
posted @ 2018-10-16 21:09 Erio 阅读(238) 评论(0) 推荐(0) 编辑