洛谷P5322 (BJOI 2019) DP
时间:2019-09-25
本文章向大家介绍洛谷P5322 (BJOI 2019) DP,主要包括洛谷P5322 (BJOI 2019) DP使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
分析:
1、用 vector<int> v[i] 来存 i 城堡, s 个对手所安排的士兵数量。
2、设 dp[i][j] 表示 i 城堡前,在当前最大派兵量为 j 时所能获得的最大价值。
3、不难想到的是,遍历 s 个对手,再用两个 for 遍历一下该城堡中各个对手的派兵量。然后对于能派的就派去看看能否更新 dp 值。
4、再者我们考虑贪心思想:若第 i 个城堡中, A 选手派出 a 个兵,那至少需要派 2 * a + 1个兵才能对答案有贡献;再者若 B 选手派出 b 个兵,且 b > a ,那么如果能派出 2 * b + 1 个兵的话,则对于 A 选手那边也可以做出贡献。故我们需要使 v[i] 进行排序,这样 dp 时如果后面大的能满足,那么直接使得 (当前以上的选手数量) * i ,得出当前城堡的贡献即可。
此算法的时间复杂度为 O(nms),看上去达到 2 * 108 ,但在 dp 中会有 break 来剪枝 。
此外由于转移方程中只与上一层即 dp[i - 1][] 有关,故可降到一维。
代码如下:
#define IO freopen("test.in","r",stdin),freopen("test.out","w",stdout) #define inf 0x3f3f3f3f #define lson root<<1 #define rson root<<1|1 #include <set> #include <map> #include <deque> #include <queue> #include <stack> #include <cmath> #include <ctime> #include <bitset> #include <cstdio> #include <string> #include <vector> #include <cstdlib> #include <cstring> #include <cassert> #include <iostream> #include <algorithm> #include <unordered_map> using namespace std; int s,n,m; int a[108],dp[20008]; vector<int> v[108]; int main() { //IO; scanf("%d%d%d",&s,&n,&m); for(int i=1;i<=n;i++) a[i]=inf; int A; for(int i=1;i<=s;i++){ for(int j=1;j<=n;j++){ scanf("%d",&A); v[j].push_back(A); a[j]=min(a[j],A); } } for(int i=1;i<=n;i++) sort(v[i].begin(),v[i].end()); for(int i=1;i<=n;i++){ for(int j=m;j>a[i]*2;j--){ for(int k=0;k<v[i].size();k++){ if(j<=v[i][k]*2) break; dp[j]=max(dp[j],dp[j-(v[i][k]*2+1)]+(k+1)*i); } } } printf("%d\n",dp[m] ); }
原文地址:https://www.cnblogs.com/Absofuckinglutely/p/11588288.html
- 制作WordPress侧边栏“随机文章”小工具并集成在主题中的方法
- 使用熔断器设计模式保护软件
- H2 Database入门
- 浅谈UE4引擎
- 无插件仅代码实现 WordPress 分页导航
- 冗余代码检查工具Simian
- “瑞波币”全套三拼域名被同买家收入囊中
- 人们可能会犯的7个数据错误
- java:POI导出excel
- WordPress自定义栏目运用实例III:添加原创/转载文章不同版权声明
- 另一个强大的Visualizers :Mole For Visual Studio
- WordPress自定义栏目运用实例V:为加密文章添加密码提示文字
- java基础:所有参数皆是按值参数
- 使用Hystrix提高系统可用性
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法