正题


题目大意

nnn个士兵在不同的位置,自己每秒可以往左移或者往右移动1格,并且干掉改格所在的士兵。
有mmm秒,第kkk秒干掉士兵可以获得m−km-km−k的价值,求最大价值之和。


解题思路

离散化先
然后我们干掉的士兵一定一个线段,所以我们设
fi,j,t,0/1f_{i,j,t,0/1}fi,j,t,0/1​表示第tst\ st s已经干掉了i∼ji\sim ji∼j的士兵,然后在最左边还是在最右边

但是我们发现ttt的范围十分的大,我们考虑转换。

假设我们总共要干掉kkk个人,如果还剩下zzz个人没被干掉,那么没移动一步就会消耗kkk点价值。

那么我们就可以列出新的方程fi,j,k,0/1f_{i,j,k,0/1}fi,j,k,0/1​表示总共要干掉i∼ji\sim ji∼j的士兵,然后在最左边还是在最右边。

然后因为全程kkk那个维度不会有任何交接我们可以不用记录,但是还是要枚举kkk。

最终状态:
设fi,j,0/1f_{i,j,0/1}fi,j,0/1​表示总共干掉kkk个人,已经干掉了i∼ji\sim ji∼j的人,在最左边还是在最右边,

那么我们可以列出动态转移方程
fi,j,0=max{fi+1,j,0+m−dist(i,i+1)∗(k−j+i),fi+1,j,1+m−dist(i,j)∗(k−j+i)}f_{i,j,0}=max\{f_{i+1,j,0}+m-dist(i,i+1)*(k-j+i),f_{i+1,j,1}+m-dist(i,j)*(k-j+i)\}fi,j,0​=max{fi+1,j,0​+m−dist(i,i+1)∗(k−j+i),fi+1,j,1​+m−dist(i,j)∗(k−j+i)}
fi,j,1=max{fi,j−1,1+m−dist(j,j−1)∗(k−j+i),fi,j−1,0+m−dist(i,j)∗(k−j+i)}f_{i,j,1}=max\{f_{i,j-1,1}+m-dist(j,j-1)*(k-j+i),f_{i,j-1,0}+m-dist(i,j)*(k-j+i)\}fi,j,1​=max{fi,j−1,1​+m−dist(j,j−1)∗(k−j+i),fi,j−1,0​+m−dist(i,j)∗(k−j+i)}

然后答案就是fl,r(r−l+1=k,mid∈[l..r])f_{l,r}(r-l+1=k,mid\in [l..r])fl,r​(r−l+1=k,mid∈[l..r])


codecodecode

#pragma GCC optimize(2)
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cctype>
using namespace std;
const int N=320;
int n,m,a[N],ans,K;
int f[N][N][2];
inline int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}
int main()
{n=read();m=read();for(int i=1;i<=n;i++)a[i]=read();a[++n]=0;sort(a+1,a+1+n);int mid=lower_bound(a+1,a+1+n,0)-a;for(K=1;K<=n;K++){memset(f,0xcf,sizeof(f));f[mid][mid][0]=f[mid][mid][1]=0;for(int i=mid;i>0;i--)for(int j=mid;j<=n;j++){if(i==j) continue; if(j-i+1>K) break;f[i][j][0]=max(f[i+1][j][0]+m-(a[i+1]-a[i])*(K-j+i),f[i+1][j][1]+m-(a[j]-a[i])*(K-j+i));f[i][j][1]=max(f[i][j-1][1]+m-(a[j]-a[j-1])*(K-j+i),f[i][j-1][0]+m-(a[j]-a[i])*(K-j+i));if(j-i+1==K) ans=max(ans,max(f[i][j][0],f[i][j][1]));} }printf("%d",ans);
}

nssl1322,jzoj(初中)2109-清兵线【dp】相关推荐

  1. [JZOJ]2109 清兵线 题解

    [JZOJ]2109 清兵线 题解 FIRST 题目大意 给你一些正整数,这些正整数为数轴上若干个点代表的数.现求:假设从原点出发,走m以内(包括m)的距离最多能够访问多少个点,输出m-每个点到达时已 ...

  2. n条直线相交最多有几个邻补角_【初中数学】102条做初中几何辅导线的规律

    今天给大家整理的是[初中数学]102条做初中几何辅导线的规律 资料如果能帮到你,希望你可以帮忙点赞-感谢-收藏支持一下! 若你需要下载word来打印,可以查看我的个人简介,上面有资料下载方式. (资料 ...

  3. 洛谷 P4147 玉蟾宫 题解【悬线dp】

    原题地址 蛤,今天正好学习一下悬线dp,写了个板子题. 用 l [ i ] [ j ] l[i][j] l[i][j]表示能延伸的最左的位置的列, r [ i ] [ j ] r[i][j] r[i] ...

  4. 【JZOJ2109】清兵线【dp】

    题目大意: 题目链接:https://jzoj.net/junior/#main/show/2109 一条数轴上有nnn个特殊格子x1,x2...xnx_1,x_2...x_nx1​,x2​...xn ...

  5. 2019.5.11 提高B组 T3 nssl-1322 清兵线

    DescriptionDescriptionDescription 在一个数轴上有nnn个点,一开始在原点,走到每个点上可以获得m−tm-tm−t(ttt为移动的距离)的价值,求最大价值 数据范围:n ...

  6. JZOJ 6290. 倾斜的线

    题目 Description Input Output Sample Input 6 15698 17433 112412868 636515040 122123982 526131695 58758 ...

  7. 【动态规划】SSL_1322 清兵线

    题意 在一个数轴上有一些小兵,每个小兵在一个单位时间会减少一滴血量,清一个兵得到的金币为这个兵剩下的血量,求从原点如何清兵会得到尽量多的金币. 思路 因为清兵要么一直往一个方向走,要么清到一半退回来, ...

  8. 上面两点下面一个三角形_三角形的五心是三线共点的产物,聊一聊初中数学共点线的证明思路...

    共点线的证法 1.意义 共点线在初等几何中,很常见,因为体现三角形重要属性的五心--重心.垂心.外心.内心和旁心,全是三线共点的产物.由此可见:共点线是反映图形特性的一种重要方式.另一方面,许多共线点 ...

  9. [jzoj 3914]人品问题{树形DP}

    题目 Description 网上出现了一种高科技产品--人品测试器.只要你把你的真实姓名输入进去,系统将自动输出你的人品指数.yzx不相信自己的人品为0.经过了许多研究后,yzx得出了一个更为科学的 ...

最新文章

  1. 17 博客后台富文本编辑
  2. 关于REID的mAP指标
  3. Mach-O 二进制文件解析
  4. 打印session cookie
  5. 使用idea创建gradle的springboot工程
  6. 截取最后一个下划线前面的字符
  7. 2017.8.23创业项目方向
  8. 二十一、PHP框架Laravel学习笔记——模型的访问器和修改器
  9. java web 对cookie技术、session技术进行小结
  10. 注意!SQLite被曝漏洞,Chrome 火狐等数千应用或受影响
  11. android中的ActionBar和ToolBar
  12. visa虚拟卡生成器_虚拟银行卡汇总
  13. 软件计算机考研考英语几,软件工程考研考哪几科
  14. 【信息融合】基于BP神经网络和DS 证据理论实现不确定性信息融合问题附matlab代码
  15. 电科 | 传感器及其应用技术
  16. 计算机领域媒体的分类有,多媒体信息主要有几种类型
  17. 【案例】星环科技×某能源企业:数据中台实践
  18. 你的小程序可以接广告赚钱了
  19. 【Linux设置系统时间】
  20. EMQX集群部署:haproxy负载均衡+tls认证

热门文章

  1. php 谷歌语音,php 语音参考
  2. pythonjson数据提取_python爬虫学习笔记(十)-数据提取之JsonPath的使用
  3. oracle日志文件大小规则,在线重做Oracle日志文件大小
  4. 计算机模拟分子设计,计算机模拟分子材料.pdf
  5. python语言中不用来定义函数的关键字_Python 语言中用来定义函数的关键字是
  6. [EDA] 2.2 简单PLD结构原理-潘松版
  7. 堆的定义与操作(C语言)
  8. [C++11]move资源的转移
  9. 记录一次线上超时异常查询
  10. android apt最新版本,解决Android studio 2.3升级到Android studio 3.0 后apt报错问题