本想在洛谷上交篇题解的,结果发现交不了,所以只能在这边写了。。。


作为一个蒟蒻,看到省选题,第一眼考虑怎么打暴力

我们可以分情况考虑

  1. 当\(s==1\)的时候

我们可以把他当成一个\(01\)背包,背包总体积为m,每个城堡为每一件物品,他的价值为 \(i\) 及他的编号,他的体积为 \(2*\) 派兵的人数加一(保证严格大于其他玩家派兵的人数)。这样跑一遍\(01\)背包不就完事了吗 QAQ。。。。

这样你就会拿到 40-50pts。但作为蒟蒻的我,已经很满足了。。。

2.其他情况,不会写QAQ。。。


附上 40-50pts 代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,s,v;
int f[20010],c[110][110],w[110][110];
void slove2()
{
for(int i = 1; i <=s; i++)//枚举人数
{
for(int j = 1; j <= n; j++)//枚举城堡数
{
scanf("%d",&v);
c[j][i] = 2*v+1;
w[j][i] = j;
}
}
for(int i = 1; i <= n; i++)//01背包
{
for(int j = m; j >= 0; j--)
{ f[j] = f[j-c[i][k]] + w[i][k]; }
}
if(s == 1) printf("%d\n",f[m]);
}
int main()
{
scanf("%d%d%d",&s,&n,&m);
slove2();
return 0;
}

但在经过神犇指导后,我思考出这样一个优化。

当我们往一个城堡派兵数量为 \(v\)时,那么小于\(v\)的其他人都会被打败,也就是出兵比我们少的,都会的打败。假设出兵比我们少的人为 \(p\) 那么你就可以获得 \(i\) * \(p\) 的分数。\(i\)为城堡编号。

我们可以通过排序加快这一过程,这样我们得到了每件物品的价值和体积。

但这时不再是个\(01\)背包,而是个分组背包。我们可以把每个城堡当做一组,

每个城堡,你可以放s种选择,来打败玩家,但每种选择只能选一种。

这不就是个妥妥的分组背包了吗???

综上,这个题的大体思路就是,通过派兵人数从大到小排序处理出每件物品的价值和体积。 物品的体积就是\(2*\)派兵人数+\(1\) 价值就是 \(i*\) 比他小的数的个数(因为排序保证前边的出兵人数都是比他小的)。最后跑一遍分组背包,就可以轻松AC了这道题。

附上AC代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,s,v;
int f[20010],c[110][110],w[110][110];
int main()
{
scanf("%d%d%d",&s,&n,&m);
for(int i = 1; i <=s; i++)
{
for(int j = 1; j <= n; j++)
{
scanf("%d",&c[j][i]);
}
}
for(int i = 1; i <= n; i++)
{
sort(c[i]+1,c[i]+s+1);//按出兵人数排序
for(int j = 1; j <= s; j++)
{
c[i][j] = c[i][j] * 2 + 1;
w[i][j] = i * j;//他的价值为在这个城堡比他派兵少的人数*这个城堡的编号
}
}
for(int i = 1; i <= n; i++)//分组背包的模板
{
for(int j = m; j >= 0; j--)
{
for(int k = 1; k <= s; k++)
{
if(j - c[i][k] >= 0)
{
f[j] = max(f[j],f[j-c[i][k]] + w[i][k]);
}
}
}
}
printf("%d\n",f[m]);
return 0;
}

本人码风过丑,请各位大佬不要喷QAQ。。。

由于作者是个菜鸡,可能无法解释清楚这道题,请见谅。。。。。

P5322 排兵布阵解题报告的更多相关文章

  1. ACM: 敌兵布阵 解题报告 -线段树

    敌兵布阵 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Li ...

  2. hdu 1166 敌兵布阵 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 题目意思:给出 N 个数你,通过对某些数进行更改(或者 + 或者 -),当输入的是 Query ...

  3. HDU 4539郑厂长系列故事――排兵布阵(状压DP)

    HDU 4539  郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 //#pragma co ...

  4. HDU 4539 郑厂长系列故事——排兵布阵

    http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others) ...

  5. 郑厂长系列故事——排兵布阵 hdu4539(状态压缩DP)

    郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  6. [BJOI2019]排兵布阵——分组背包

    题目链接: [BJOI2019]排兵布阵 对于每座堡垒,将$s$个对手排序,显然如果安排的兵力能打败第$i$个对手就一定能打败前$i-1$个. 那么对于第$i$座城堡,可以看做有$s+1$个物品(可以 ...

  7. [BJOI2019]排兵布阵(动态规划)

    [BJOI2019]排兵布阵(动态规划) 题面 洛谷 题解 暴力dp: 设\(f[i][j]\)表示考虑到了第\(i\)座城市用了\(j\)人的最大收益,枚举在这个城市用多少人就可以了. 优化: 发现 ...

  8. HDU-4539郑厂长系列故事——排兵布阵(状态压缩,动态规划)

    郑厂长系列故事--排兵布阵 Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total ...

  9. HDU 4539 郑厂长系列故事——排兵布阵 状压dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/O ...

随机推荐

  1. 使用DataStax Java驱动程序的最佳实践

    引言 如果您想开始建立自己的基于Cassandra的Java程序,欢迎! 也许您已经参加过我们精彩的DataStax Academy课程或开发者大会,又或者仔细阅读过Cassandra Java驱动的 ...

  2. 做一名合格的DBA

    Oracle DBA的角色定义 开发型DBA 数据库安装 数据库架构设计(架构和建模) 代码开发(存储过程,SQL) 运维型DBA 数据库日常监控 故障处理 性能优化 数据备份,容灾 数据库安全规划 ...

  3. php中的加密解密模块-mcrypt

    <?php /* 打开加密算法和模式 */ $td = mcrypt_module_open('rijndael-256', '', 'ofb', ''); /* 创建初始向量,并且检测密钥长度 ...

  4. java-对象引用和对象本身

    示意图 应用场景 1.赋值 只有用新的对象本身直接赋值给对应引用,该对象引用的值会改变,因为对象引用指向的对象本身改变了. 2.方法入参 调用方法和被调用方法. 代码 import com.aliba ...

  5. Go语言使用swagger生成接口文档

    swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言.Swagger与一组开源软件工具一起使用,以设计.构建.记录和使用RESTful Web服 ...

  6. Redux异步解决方案之Redux-Thunk原理及源码解析

    前段时间,我们写了一篇Redux源码分析的文章,也分析了跟React连接的库React-Redux的源码实现.但是在Redux的生态中还有一个很重要的部分没有涉及到,那就是Redux的异步解决方案.本 ...

  7. Tomcat9w.exe无法启动为started

    问题: startup.bat可以正常启动,http://localhost:8080/ 可以正常访问.但是Tomcat9w.exe无法启动为started,一直为Stopped. 解决方案: 如下图 ...

  8. Java线程本质

    java当中的线程和操作系统的线程是什么关系? 关于操作系统的线程 linux操作系统的线程控制原语 int pthread create(pthread t *thread, const pthre ...

  9. 关于Vue-CLI的那些事儿

    Vue CLI是基于Vue.js进行快速发展的完整系统,提供了: 交互式的项目脚手架 实现零配件的原型开发 图形化的创建和管理项目的界面 基本框架的构建: . ├── build/ # webpack ...

  10. pwnable.kr之input

    连接到远程服务器:ssh input2@pwnable.kr -p2222 查看题目所给的代码,根据题目的要求我们要给出所有符合条件的输入才能拿到flag,本来想在输入上动点歪脑筋,结果输入有字节数的 ...