cf933A dp题

一开始看错是连续子序列了,然后样例刚好能过。。

然后正解没想出来,网上看了题解:感觉正解是枚举2开始的位置,然后再枚举翻转的区间,pos左右两侧分别求出贡献最大的那个区间,左右两部分的贡献是独立计算的

#include <cstdio>
#include <cmath>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
#define mst(a,b) memset((a),(b),sizeof(a))
#define rush() int T;scanf("%d",&T);while(T--) typedef long long ll;
const int maxn = ;
const ll mod = 1e9+;
const ll INF = 1e18+;
const double eps = 1e-; int n;
int a[maxn];
int pre1[maxn];
int pre2[maxn]; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
pre1[i]=pre1[i-]+(a[i]==);
}
for(int i=n;i>=;i--) pre2[i]=pre2[i+]+(a[i]==);
int ans=;
for(int k=;k<=n+;k++) //枚举位置pos
{
int num1=,num2=;
for(int i=;i<=k;i++) num1=max(num1,pre1[i-]+pre2[i]-pre2[k]); //枚举l
for(int i=k;i<=n+;i++) num2=max(num2,pre2[i]+pre1[i-]-pre1[k-]); //枚举r
ans=max(ans,num1+num2);
}
printf("%d\n",ans);
}

然后是神仙做法,因为答案必定是11111222221111122222的前缀样式,所以只要从左到右扫一次即可。。

#include<bits/stdc++.h>
using namespace std; #define maxn 2000 int n;
int a[maxn+];
int f[maxn+][]; int main() {
scanf("%d",&n);
for(int i=; i<=n; i++) scanf("%d",&a[i]);
for(int i=; i<=n; i++) {
for(int j=; j<=; j++) {
f[i][j]=f[i][j-];
if(a[i]==(j+)%+) f[i][j]=max(f[i][j],f[i-][j]+);
else f[i][j]=max(f[i][j],f[i-][j]);
}
}
printf("%d",f[n][]);
return ;
}

cf938D 最短路+新建源点

第一次在cf上做这种题,这题就是把每个点权转化为到源点的边权,然后跑一次最短路即可

/*
给定无向图,有边权和点权
现在要求出每个点i的最小代价2*d(i,j)+aj,i可以等于j
建图:边权*2,建立源点和每个点连边,边权是ai
然后以源点为起点跑最短路即可
*/
#include<bits/stdc++.h>
#include<queue>
using namespace std;
#define maxn 400005
#define ll long long
struct Edge{ll to,nxt,w;}edge[maxn<<];
ll head[maxn],tot,n,m,a[maxn];
void init(){
memset(head,-,sizeof head);
tot=;
}
void addedge(ll u,ll v,ll w){
edge[tot].to=v;edge[tot].w=w;
edge[tot].nxt=head[u];head[u]=tot++;
} ll d[maxn],v[maxn];
priority_queue<pair<ll,ll> >pq;
void dijkstra(){
memset(d,0x3f,sizeof d);
memset(v,,sizeof v);
d[n+]=;
pq.push(make_pair(,n+));
while(pq.size()){
pair<ll,ll>c=pq.top();pq.pop();
if(v[c.second])continue;
v[c.second]=;
ll x=c.second;
for(int i=head[x];i!=-;i=edge[i].nxt){
ll y=edge[i].to,w=edge[i].w;
if(v[y])continue;
if(d[y]>d[x]+w){
d[y]=d[x]+w;
pq.push(make_pair(-d[y],y));
}
}
}
} int main(){
init();
cin>>n>>m;
for(int i=;i<=m;i++){
ll u,v,w;
cin>>u>>v>>w;
addedge(u,v,*w);
addedge(v,u,*w);
}
for(int i=;i<=n;i++){
cin>>a[i];
addedge(i,n+,a[i]);
addedge(n+,i,a[i]);
}
dijkstra(); for(int i=;i<=n;i++)
cout<<d[i]<<" ";
}

cf939E 三分+简单公式

学了下三分的写法,能用来求单峰函数的极值

三分链接: https://blog.csdn.net/pi9nc/article/details/9666627

/*
1.往多重集合s里加数 ,每次给的数时单调不递减的
2.求子集ss,使max(ss)-mean(ss)最大
三分法来做即可
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 500005
#define ll long long
double sum[maxn],n;
ll len,Max;
double f(int i){
return ((double)sum[i]+Max)/(i+);
}
double sanfen(int l,int r){
while(l<r-){
int mid=(l+r)>>;
int mmid=(mid+r)>>;
if(f(mid)>f(mmid))
l=mid;
else r=mmid;
}
if(f(l)>f(r))return f(r);
return f(l);
}
int main(){
int q,op;
cin>>q;
while(q--){
cin>>op;
if(op==){
cin>>Max;
sum[++len]=Max+sum[len-];
}
else {
printf("%.10lf\n",Max-sanfen(,len-));
}
}
}

cf935D 概率递推dp

还是第一次做这种题。。要学一下概率dp了。。

/*
概率递推+逆元取模运算
从末尾往前推比从前往后推要更简单
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define maxn 100005
ll a[maxn],b[maxn],n,m,dp[maxn];
ll inv2,invm;
ll exgcd(ll a,ll b,ll &x,ll &y){
if(b==){x=,y=;return a;}
ll d=exgcd(b,a%b,x,y);
ll z=x;x=y;y=z-a/b*x;
return d;
} int main(){
cin>>n>>m;
for(int i=;i<=n;i++)cin>>a[i];
for(int i=;i<=n;i++)cin>>b[i];
ll x,y;
exgcd(,mod,x,y);inv2=(x+mod)%mod;
exgcd(m,mod,x,y);invm=(x+mod)%mod;
for(int i=n;i>=;i--){
if(a[i] && b[i]){//第i位都是固定的数
if(a[i]==b[i])dp[i]=dp[i+];
else dp[i]=a[i]>b[i];
}
else if(b[i])//ai填数,ai==bi的概率+ai>bi的概率
dp[i]=dp[i+]*invm%mod+(m-b[i])*invm%mod;
else if(a[i])//bi填数,ai==bi的概率+ai>bi的概率
dp[i]=dp[i+]*invm%mod+(a[i]-)*invm%mod;
else if(!a[i] && !b[i])//都填数,ai==bi的概率+ai!=bi且ai>bi的概率
dp[i]=dp[i+]*invm%mod+(m-)*inv2%mod*invm%mod;
}
cout<<dp[]%mod<<endl;
}

cf自训4.10的更多相关文章

  1. 沈逸老师PHP魔鬼特训笔记(10)

    为了防止代码让我们混淆不清,大家看视频中的分离方法 1.新建了一个文件夹叫code (这代表是代码) 2.再新建一个文件夹叫page (这代表是页面) 代码该怎么写呢? 这里要记住口诀 1.index ...

  2. CF Educational Codeforces Round 10 D. Nested Segments 离散化+树状数组

    题目链接:http://codeforces.com/problemset/problem/652/D 大意:给若干个线段,保证线段端点不重合,问每个线段内部包含了多少个线段. 方法是对所有线段的端点 ...

  3. cf自训6

    cf946D 背包+区间dp 好题 /* 先预处理出每行消去i个1后可以的到的最小时间: 先求每行的前缀和,枚举左端点和右端点,消去的1 cost=tot-sum[r]+sum[l-1],区间长度=r ...

  4. Gym.101955: Asia Shenyang Regional Contest(寒假自训第10场)

    C.Insertion Sort 题意:Q次询问,每次给出N,M,Mod,问你有多少种排列,满足前面M个数字排序之后整个序列的LIS>=N-1. 思路:我们把数字看成[1,M],[N-M+1,N ...

  5. 沈逸老师PHP魔鬼特训笔记(9)--进化

    回到第一课,我们学过PHP母体,了解过解析PHP程序.PHP其实内置了一个web服务器,专门给我们开发测试使用,那么接下来我们要完成的是:生成后创建一个web 服务,在浏览器中可以访问. PHP的母体 ...

  6. 10、QT分析之WebKit

    该文章整理自 网易博客 http://blog.163.com/net_worm/blog/static/12770241920101831312381/ 转载请注明出处 WebKit是QT4新整合的 ...

  7. H3C查看CF卡内的文件

    查看CF卡内的文件 <H3C>dir             //查看文件及目录文件 Directory of cf:/ -------------查看的是CF卡的内容      0    ...

  8. hbase开发实例

    1.put/checkAndPut package com.testdata; import java.io.IOException; import org.apache.hadoop.conf.Co ...

  9. 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror) in codeforces(codeforces730)

    A.Toda 2 思路:可以有二分来得到最后的数值,然后每次排序去掉最大的两个,或者3个(奇数时). /************************************************ ...

随机推荐

  1. eclipse(STS)安装jd-eclipse插件实现查看API源代码功能

    emmm,IDEA确实是比STS智能很多,不过适当的转化也是需要的,这里介绍一下eclipse(STS)实现查看class反编译的源文件的功能 去Java Decompiler官网下一下eclipse ...

  2. Axis2创建WebService服务端接口+SoupUI以及Client端demo测试调用

    第一步:引入axis2相关jar包,如果是pom项目,直接在pom文件中引入依赖就好 <dependency> <groupId>org.apache.axis2</gr ...

  3. AtCoder Beginner Contest 122 D - We Like AGC(DP)

    题目链接 思路自西瓜and大佬博客:https://www.cnblogs.com/henry-1202/p/10590327.html#_label3 数据范围小 可直接dp f[i][j][a][ ...

  4. iOS高德地图让指定区域或者点显示在屏幕中间

    对于高德地图也是一个新手,很多功能看文档,问技术 或者高德群里讨论  群号:204668425 在我们需求中绘制的有 圆 折线 不规则图形 方式,打开地图指定的绘制图形置于屏幕中间 1.首先创建一个数 ...

  5. 深入理解AMQP协议

    深入理解AMQP协议 2018年10月22日 12:32:16 一剑何风情 阅读数:1941   文章目录 一.AMQP 是什么 二.AMQP模型 工作过程 深入理解 三.Exchange交换机 默认 ...

  6. logstash/conf.d文件编写

    logstash-01.conf input { beats { port => 5044 host => "0.0.0.0" type => "log ...

  7. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建四:配置springmvc

    在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建三:配置spring并测试的基础上 继续进行springmvc的配置 一:配置完善web.xml文件

  8. Go语言系列(八)- Goroute和Channel

    一.Goroute 1. 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配合调度的一个独立单位 B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能 ...

  9. 【SQL】INSERT INTO SELECT语句与SELECT INTO FROM语句

    INSERT INTO SELECT语句与SELECT INTO FROM语句,都是将一个结果集插入到一个表中: #INSERT INTO SELECT语句 1.语法形式: Insert into T ...

  10. 6核 CPU导致SQL2005安装时出“无法启动服务”错

    周一新买的IBM3650M3的服务器上安装SQL server2005 安装到一半时,报"提示:SQL Server 服务无法启动."错. 换了几个操作系统版本和换了几个版本的sq ...