luogu P5322 [BJOI2019]排兵布阵】的更多相关文章

传送门 普及dp 设\(f_{i,j}\)表示前\(i\)个城堡,用\(j\)人的最大价值,转移枚举一个对手,如果这个对手在\(i\)这个城堡人数是第\(k\)小的,那么用\(2a_i+1\)人可以得到\(ik\)的价值 #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<vector>…
题目链接: [BJOI2019]排兵布阵 对于每座堡垒,将$s$个对手排序,显然如果安排的兵力能打败第$i$个对手就一定能打败前$i-1$个. 那么对于第$i$座城堡,可以看做有$s+1$个物品(可以不选),第$j$个物品代价为$2*v[j]+1$,收益为$i*j$. 剩下的只需要将每座城堡的所有物品放在一组然后分组背包即可. #include<set> #include<map> #include<queue> #include<stack> #inclu…
[BJOI2019]排兵布阵(动态规划) 题面 洛谷 题解 暴力dp: 设\(f[i][j]\)表示考虑到了第\(i\)座城市用了\(j\)人的最大收益,枚举在这个城市用多少人就可以了. 优化: 发现用的人数一定是某个敌人的人数的二倍加一,那么决策只有\(O(s)\)个. 时间复杂度\(O(snm)\).(不满) #include<iostream> #include<cstdio> #include<cstring> #include<algorithm>…
[BJOI2019]排兵布阵 DP 比较好想的DP,设\(dp[i][j]\)表示第\(i\)个城堡时,已派出\(j\)个士兵.决策时,贪心派出恰好严格大于某一玩家派出的数量的两倍(不然浪费).我们发现又可以排序预处理出\(a[i][j]\)表示第\(i\)个城堡,出兵数量第\(j\)大的人出兵数量(因为这样可以很容易算出贡献,即为\(k\times i\)) dp转移方程即为: \[ dp[j]=MAX(dp[j-a[i][k]*2-1]+k*i, dp[j]); \] AC Code: #i…
题目 这个\(dp\)出在普及都算水题吧 直接背包,\(O(nms)\)跑不满,非常稳 #include<cstdio> #include<vector> #include<cstring> #include<iostream> #include<algorithm> #define re register #define LL long long #define max(a,b) ((a)>(b)?(a):(b)) #define min…
城为物,人为容,价值?排序后,一切都明了 #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++a) #define nR(a,b,c) for(r…
LOJ#3092. 「BJOI2019」排兵布阵 这题就是个背包啊,感觉是\(nms\)的但是不到0.2s,发生了什么.. 就是设\(f[i]\)为选了\(i\)个人最大的代价,然后有用的人数只有\(s\)种 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define sp…
HDU 4539  郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 //#pragma comment(linker,"/STACK:102400000,102400000") #include <map> #include <set> #include <stack> #include <queue> #include <c…
http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1708    Accepted Submission(s): 620 Problem Description 郑厂长不是正厂长 也不是副厂长 他根本就不是厂长 事实上…
郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1509    Accepted Submission(s): 554 Problem Description 郑厂长不是正厂长 也不是副厂长 他根本就不是厂长 事实上 他是带兵打仗的团长 一天,郑厂长带着他的军队来到了一个n*m的平原准备布阵. 根据以往的战斗…
郑厂长系列故事--排兵布阵 Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 9 Accepted Submission(s) : 1 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 郑厂长不是正厂长 也不是副厂长 他根本就不是厂长 事实上…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) 问题描述 郑厂长不是正厂长 也不是副厂长 他根本就不是厂长 事实上 他是带兵打仗的团长 一天,郑厂长带着他的军队来到了一个n*m的平原准备布阵. 根据以往的战斗经验,每个士兵可以攻击到并且只能攻击到与之…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 3289    Accepted Submission(s): 1144 Problem Description 郑厂长不是正厂长 也不是副厂长 他根本就不是…
P1911 L国的战斗之排兵布阵 题目背景 L国即将与I国发动战争!! 题目描述 L国的指挥官想让他的每一个军营都呈现出国徽形——“L”形(方向无所谓).当然,他的指挥营除外(这叫做个性),他想不出该怎么排,就这样,这任务又变成了你的…… 输入输出格式 输入格式: 一行三个数:n.x.y表示军营大小为2^N,指挥营在(x,y)的位置上. 输出格式: 2^N行,每行2^N个数,表示军营号(按先行后列顺序)指挥营用0表示. 输入输出样例 输入样例#1: 复制 4 1 3 输出样例#1: 复制 1 1…
题意:                  郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1883    Accepted Submission(s): 686 Problem Description 郑厂长不是正厂长 也不是副厂长 他根本就不是厂长 事实上 他是带兵打仗的团长 一天,郑厂长带着他的军队来到…
题目大意:有$n$座城堡,$s$轮游戏. 对于第$x$轮,第i座城堡的士兵数量为$a[x][i]$. 如果你需要攻下第i座城堡,你在第i座城堡部署的士兵必须严格大于$2a[x][i]$,如果攻下了你会获得$i$的收益. 对于这$s$轮游戏,你只能采用一种部署方式. 下面问你应该如何部署,使得你在这$s$轮游戏中的收益和最大. 数据范围:$n,s≤100$,$m≤2000$. 我们考虑直接$dp$,设$f[i][j]$表示前$i$个城堡部署了$j$名士兵的最大收益. 不难发现,$f[i][j]=\…
题面 传送门 题解 设\(dp_{i,j}\)表示前\(i\)座塔派了总共\(j\)个人的最大收益,转移显然 //minamoto #include<bits/stdc++.h> #define R register #define inline __inline__ __attribute__((always_inline)) #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(R int i…
题目:https://loj.ac/problem/3092 同一个人的不同城堡之间没有什么联系,只是和<=m.所以对每个城堡的 s 个值排序,做一个 f[ i ][ j ] 表示第 i 个城堡花 j 的代价最大能得到多少收益. dp[ i ][ j ] 表示前 i 个城堡花 j 的代价的最大收益. dp[ i ][ j ] = max( dp[ i-1 ][ k ] + f[ i ][ j-k ] ) . 发现 f[ i ][ * ] 是一个分 s 段的函数.所以枚举 s 段即可.也就是把 f…
本想在洛谷上交篇题解的,结果发现交不了,所以只能在这边写了... 作为一个蒟蒻,看到省选题,第一眼考虑怎么打暴力 我们可以分情况考虑 当\(s==1\)的时候 我们可以把他当成一个\(01\)背包,背包总体积为m,每个城堡为每一件物品,他的价值为 \(i\) 及他的编号,他的体积为 \(2*\) 派兵的人数加一(保证严格大于其他玩家派兵的人数).这样跑一遍\(01\)背包不就完事了吗 QAQ.... 这样你就会拿到 40-50pts.但作为蒟蒻的我,已经很满足了... 2.其他情况,不会写QAQ…
这虽然是中文题,然而没看懂,不懂的地方,就是在曼哈顿距离这块,网上搜索了一下,写了个程序,是测试曼哈顿距离的. 曼哈顿距离:两点(x1,y1)(x2,y2)的曼哈顿距离为|x1-x2|+|y1-y2| 测试代码: #include <map> #include <set> #include <list> #include <cmath> #include <queue> #include <stack> #include <ve…
印象中这道题好像我曾经肝过,但是没肝出来,现在肝出来了也挺开心的 题目链接:http://poj.org/problem?id=1185 Time Limit: 2000MS Memory Limit: 65536K Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图.在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部…
多组n *m 0不能放1可以放 每个士兵可以攻击到并且只能攻击到与之曼哈顿距离为2的位置以及士兵本身所在的位置. #include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #include<map> using namespace std; #define MAXN 1<<10 ][]; ]; ][][]; //dp[i][j][k] 第i行状态…
中文题,题意不再赘述 对于“?”这一格,它所能攻击到的(曼哈顿距离为2的) 前方的 即“√”的四个位置 那么与此格有关的即它前方两行(即状压这两行) 首先预处理每行能满足的: i 和(i<<2)不能同时放 然后分别枚举前一行和再前一行的所有状态(每一行的状态至多只有$2^{10}$=1024个) 判断能否共存 注意mp==1处才能放,mp==0处不能放 HDOJ 4539…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 题意:中文,不解释 题解:将每一行的状态压缩,然后进行DP,也可以用最大团做.这里我用的DP #include<cstdio> #include<cstring> #define max(a,b) ((a)>(b)?(a):(b)) ]; ][][];//dp[i][j][k]表示第i行状态为j,i-1行状态为k时的士兵最大值 <<];//合法状态 <&l…
来源hdu1166 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视. 中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问…
题意:有不规则地图,在上面放n个相同的棋子,要求摆放的时候不同行不同列.问:有多少种摆法? 思路:dfs+回溯 用一个book[]数组来表示当前列是否有放棋子 一行一行的遍历,对一行来说遍历它的列,如果满足book[i] == 0 && map[cur][i] == '#'  则可以摆放,然后继续遍历下一行 代码上需要注意的地方: ; i<n; i++) && map[cur][i] == '#') { book[i] = ; m++; dfs(cur + ); bo…
包含不小于$\sqrt n$列的只有不大于$\sqrt n$行,修改时这些行打标记,否则暴力更新,操作一列的时候暴力更新这些行.合并没啥影响直接搞就是了.更新需要访问位置,感觉必须用哈希表,并不是特别靠谱.平均复杂度$O(n\sqrt n)$. #include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/hash_policy.hpp> using namespac…
题意: 给定n个兵营的士兵初始值, 然后有最多40000个操作: 操作一共有两种, 一个是查询给定[a,b]区间兵营的士兵总和. 另一个是增加/减少指定兵营的士兵数目. 输出每次查询的值. 分析: 线段树单点更新模板 代码: #include <bits/stdc++.h> using namespace std; + ; struct{ int l, r, sum; }tree[maxn*];//起码要*4 int a[maxn]; int n; void build(int index,…
Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视. 中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少…
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 43689    Accepted Submission(s): 18539 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头…