首页 技术 正文
技术 2022年11月23日
0 收藏 445 点赞 4,126 浏览 859 个字

题目链接:

[BJOI2019]排兵布阵

对于每座堡垒,将$s$个对手排序,显然如果安排的兵力能打败第$i$个对手就一定能打败前$i-1$个。

那么对于第$i$座城堡,可以看做有$s+1$个物品(可以不安排兵力),第$j$个物品代价为$2*v[j]+1$,收益为$i*j$。

剩下的只需要将每座城堡的所有物品放在一组然后分组背包即可。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int f[120][20010];
int cnt[120];
int g[120][120];
int h[120][120];
int s[120];
int mp[120][120];
int n,m,k;
int main()
{
scanf("%d%d%d",&k,&n,&m);
for(int i=1;i<=k;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&mp[i][j]);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=k;j++)
{
s[j]=mp[j][i];
}
sort(s+1,s+1+k);
for(int j=1;j<=k;j++)
{
if(2*s[j]+1<=m)
{
g[i][++cnt[i]]=2*s[j]+1;
h[i][cnt[i]]=i*j;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<=m;j++)
{
for(int k=0;k<=cnt[i];k++)
{
if(j>=g[i][k])
{
f[i][j]=max(f[i][j],f[i-1][j-g[i][k]]+h[i][k]);
}
}
}
}
printf("%d",f[n][m]);
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,950
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,476
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,289
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,107
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,739
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,772