首页 > 其他分享 >洛谷P5322 [BJOI2019] 排兵布阵

洛谷P5322 [BJOI2019] 排兵布阵

时间:2023-06-10 16:55:44浏览次数:42  
标签:BJOI2019 排兵 le 洛谷 int right 100 dp left

题目大意

有s名对手,n座城堡,你有m名士兵

如果一名玩家向第 \(i\) 座城堡派遣的士兵数严格大于对手派遣士兵数的两倍,那么这名玩家就占领了这座城堡,获得 \(i\) 分。

求最大得分

数据范围

对于 \(10\%\) 的数据: \(s=1,n \le 3,m \le 10\)

对于 \(20\%\) 的数据: \(s=1,n \le 10,m \le 100\)

对于 \(40\%\) 的数据: \(n\le 10,m\le 100\)

对于另外 \(20\%\) 的数据: \(s=1\)

对于 \(100\%\) 的数据:

\(1\le s \le 100\)
\(1\le n \le 100\)
\(1\le m \le 20000\)

对于每名玩家 \(a_i \ge 0,\sum\limits_{i=1}^n a_i \le m\)


题解

不难想到用背包的方法去解决这道题

设第 $ i $ 座城堡派出兵力第 $ k$ 多的玩家派出了 $ a \left[ i \right] \left[ k \right]$名士兵

对于每座城堡的代价,一定是 \(a \left[ i \right] \left[ k \right] \times 2 + 1\),因为题目中是严格大于,所以要 \(+1\)

如果派出兵力大于了 \(a \left[ i \right] \left[ k \right] \times 2 + 1\),那多余的一定是浪费的

对于 $ a \left[ i \right] \left[ k \right] $,我们只需要在一开始将 \(a\) 数组排序即可

$ d p $ 转移方程即为: \(d p \left[ j \right] = \max \left( d p \left[ j - a\left[ i \right] \left[ k \right] \times 2 - 1 \right] + k \times i ,d p \left[ j \right] \right)\)

#include<bits/stdc++.h>
using namespace std;
int s,n,m,dp[20010],ans,a[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",&a[j][i]);
	for(int i = 1;i<=n;i++)
		sort(a[i]+1,a[i]+s+1);
	for(int i = 1;i<=n;i++)
		for(int j = m;j>=0;j--)
			for(int k = 1;k<=s;k++)
				if(j>a[i][k]*2)
					dp[j] = max(dp[j],dp[j-a[i][k]*2-1]+i*k);
	for(int i = 0;i<=m;i++) ans = max(ans,dp[i]);
	printf("%d",ans);
	return 0;
}

标签:BJOI2019,排兵,le,洛谷,int,right,100,dp,left
From: https://www.cnblogs.com/cztq/p/17471520.html

相关文章

  • 【若归】 【LGR-142-Div.4】洛谷入门赛 #13赛后反思
    比赛链接:【LGR-142-Div.4】洛谷入门赛#13rk288,比前几次差(可能是因为rated?)A十年OI一场空,不开longlong见祖宗#include<bits/stdc++.h>usingnamespacestd;intmain(){ longlongintn; cin>>n; cout<<"8"<<12*(n-2)<<""<<6*(n-......
  • 洛谷 P6003 总结
    题目:洛谷P6003链接:洛谷,逐月题意有一个人欠了别人\(n\)单位牛奶,每一天他会还\(y=\max(m,\frac{n-g}{x})\)单位,\(g\)为之前还的牛奶,请求出最大的\(x\)使得这个人在\(k\)天后能换至少\(k\)单位牛奶。\(1\len,m,k\le10^{12},km<n\)。思路暴力......
  • 【LGR-141-Div.2】洛谷 6 月月赛 I (前两题)
    T1:金盏花传送门直接暴力枚举前6位的值即可,记得开longlong#include<bits/stdc++.h>usingnamespacestd;#defineintlonglonginty,z,ans=1e18;signedmain(){ scanf("%lld%lld",&y,&z); for(inti=100000;i<=999999;i++){ intx=i*1000000+y; ans=min......
  • 洛谷P1587 [NOI2016] 循环之美
    原文链接:[sol]P1587[NOI2016]循环之美-icyM3tra'sBlog此为备份。题目传送门0.前言提供一种式子较为简洁且不算难写的做法。以及介绍一种较为优秀的dp版杜教筛实现。1.式子推导我们知道纯循环小数一定可以写成分母形如\(k^a-1\)的分数。因此约分后的分母一定......
  • 洛谷 P3723 [AH2017/HNOI2017]礼物
    由题面可得:\[E_j=\sum_{i=1}^{j-1}\frac{q_i}{(i-j)^2}-\sum_{i=j+1}^{n}\frac{q_i}{(i-j)^2}\]令\(q_0=0\),并将没有意义的分式的值视为\(0\),则有:\[E_j=\sum_{i=0}^j\frac{q_i}{(i-j)^2}-\sum_{i=j}^n\frac{q_i}{(i-j)^2}\]令\(A(i)......
  • 海底高铁(洛谷3406)
         #include<iostream>usingnamespacestd;constintN=100010;intp[N];//要去的城市intA[N],B[N],C[N];longlongs,ans[N];//ans差分数组intmain(){intN,M;scanf("%d%d",&N,&M);for(inti=1;i<=M......
  • 洛谷3397地毯
        问题分析:这个比y总的二维差分模板要简单一些,因为他一开始的矩阵都为0,而且矩阵是一个n方阵,那么其实可以用y总的模板来写,下面是二维差分矩阵的原理  #include<iostream>usingnamespacestd;constintN=1010;intb[N][N];voidinsert(intx1,in......
  • 洛谷 P9344. 去年天气旧亭台
    去年天气旧亭台题目背景依旧是过往的天气,过往的楼台烟雨。时间悄悄流逝着,山河仍在,人却已不是过去的人……题目描述登上楼台,旧时满面沉灰的地板映入眼帘。共有$n$块地板,地板分为两类,第$i$块地板的类别用$c_i$表示,积灰程度用$a_i$表示。注意$c_i$为$0$或$1$。现......
  • 洛谷 P9248 - [集训队互测 2018] 完美的集合
    显然,如果选择的\(k\)个“合法集合”固定了,那么可以放置装置的点如果存在,那么必然形成一个连通块,也就是说,答案等于所有合法方案中,可以放置装置的点形成的连通块个数之和。而根据点减边的套路,这等价于,枚举每个点,计算有多少种方案满足可以在其放置装置,再枚举每条边,计算有多少种方案......
  • 洛谷颜色对照表
    $$\def\arraystretch{1.2}\begin{array}{|c|l|l||c|l|l|}\hline颜色名称&十六进制编码&\text{RGB对应值}&颜色名称&十六进制编码&\text{RGB对应值}\\\hline\color{#52C41A}\text{AC绿}&\text{52C41A}&\text{(82,196,26)}&\color{#FE4C......