cf自训6
cf946D 背包+区间dp 好题
/*
先预处理出每行消去i个1后可以的到的最小时间:
先求每行的前缀和,枚举左端点和右端点,消去的1 cost=tot-sum[r]+sum[l-1],区间长度=r-l+1
time[cost]=min(time[cost],len)
然后再进行行间处理:
就是n行删k个,转化为n组物品,然后总代价是k
分组背包做一下完事
dp[i][j]表示到第i行删了j个的最少上课时间
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 505
int n,m,K,mp[maxn][maxn];
int t[maxn][maxn],sum[maxn][maxn],dp[maxn][maxn]; void init(){
memset(t,0x3f,sizeof t);
for(int i=;i<=n;i++){
t[i][sum[i][m]]=;//全删完的情况
for(int l=;l<=m;l++)
for(int r=l;r<=m;r++){
int len=r-l+;
int cost=sum[i][m]-(sum[i][r]-sum[i][l-]);
t[i][cost]=min(t[i][cost],r-l+);
}
}
/*for(int i=1;i<=n;i++){
for(int j=0;j<=sum[i][m];j++)
cout<<t[i][j]<<" ";
puts("");
}*/
}
int main(){
cin>>n>>m>>K;
char ch;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
cin>>ch;
mp[i][j]=ch-'';
sum[i][j]=sum[i][j-]+mp[i][j];
}
init(); memset(dp,0x3f,sizeof dp);
for(int j=;j<=K;j++)dp[][j]=t[][j];
for(int i=;i<=n;i++)
for(int j=;j<=K;j++)
for(int c=;c<=j;c++)
dp[i][j]=min(dp[i][j],dp[i-][j-c]+t[i][c]); int ans=0x3f3f3f3f;
for(int j=;j<=K;j++)
ans=min(ans,dp[n][j]);
cout<<ans<<endl;
}
cf893d 线段树区间更新,可以傻逼贪心做
/*
在每个0之前都要变成非负,这个非负数要尽量大。。
先求前缀和数组,从左往右扫,找到第一个在0前的负值点,将其提高到允许的最大值x,然后后面统一+x
线段树维护区间最大前缀和,然后从左往右扫,扫到ai=0时进行询问
如果该点前缀和小于0那么将其提高,提高的上限lim=d-后面区间最大前缀和,如果lim+当前值<0,那么不可行
反之不进行操作
对前缀和先判一下。。
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
#define ll long long
ll ans,n,d,a[maxn],sum[maxn],flag; #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
ll Max[maxn<<],lazy[maxn<<];
void pushup(int rt){Max[rt]=max(Max[rt<<],Max[rt<<|]);}
void pushdown(int rt){
if(lazy[rt]){
lazy[rt<<]+=lazy[rt];lazy[rt<<|]+=lazy[rt];
Max[rt<<]+=lazy[rt];Max[rt<<|]+=lazy[rt];
lazy[rt]=;
}
}
void build(int l,int r,int rt){
if(l==r){Max[rt]=sum[l];return;}
int m=l+r>>;
build(lson);build(rson);
pushup(rt);
}
void update(int L,int R,ll val,int l,int r,int rt){
if(L<=l &&R>=r){lazy[rt]+=val;Max[rt]+=val;return;}
int m=l+r>>;
pushdown(rt);
if(L<=m)update(L,R,val,lson);
if(R>m)update(L,R,val,rson);
pushup(rt);
}
ll query(int L,int R,int l,int r,int rt){
if(L<=l && R>=r)return Max[rt];
pushdown(rt);
int m=l+r>>;ll res=-0x3f3f3f3f;
if(L<=m)res=query(L,R,lson);
if(R>m)res=max(res,query(L,R,rson));
return res;
}
int main(){
cin>>n>>d;
for(int i=;i<=n;i++)cin>>a[i];
for(int i=;i<=n;i++){sum[i]=sum[i-]+a[i];if(sum[i]>d)flag=;}
if(flag){
puts("-1");
return ;
}
build(,n,);
for(int i=;i<=n;i++){
if(a[i]==){
int tmp=query(i,i,,n,);
if(tmp>=)continue;
else{
int Max=query(i,n,,n,);
int lim=d-Max;
if(tmp+lim< || flag){
puts("-1");
return ;
}
else {
update(i,n,lim,,n,);
ans++;
}
}
}
}
cout<<ans<<endl;
}
cf797E 复杂度均摊成根号n级别,新题
#include<bits/stdc++.h>
using namespace std;
#define maxn 120005
int q,n,a[maxn];
int dp[maxn][];//dp[i][j]表示在位置i(p=i),k=j时的跳跃步数,dp[i][j]=dp[i+a[i]+j][j]+1
void init(){
for(int j=;j<=;j++)
for(int i=n;i>=;i--){
if(i+a[i]+j>n)dp[i][j]=;
else dp[i][j]=dp[i+a[i]+j][j]+;
}
}
int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
init(); cin>>q;
while(q--){
int ans=,p,k;
cin>>p>>k;
if(k<=){
cout<<dp[p][k]<<'\n';
continue;
}
while(p<=n){
p+=a[p]+k;
ans++;
}
cout<<ans<<'\n';
}
}
cf46D 线段树区间合并沙比提。。一个vector下标搞错弄了好久
#include<bits/stdc++.h>
using namespace std;
#define maxn 120005
int q,n,a[maxn];
int dp[maxn][];//dp[i][j]表示在位置i(p=i),k=j时的跳跃步数,dp[i][j]=dp[i+a[i]+j][j]+1
void init(){
for(int j=;j<=;j++)
for(int i=n;i>=;i--){
if(i+a[i]+j>n)dp[i][j]=;
else dp[i][j]=dp[i+a[i]+j][j]+;
}
}
int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
init(); cin>>q;
while(q--){
int ans=,p,k;
cin>>p>>k;
if(k<=){
cout<<dp[p][k]<<'\n';
continue;
}
while(p<=n){
p+=a[p]+k;
ans++;
}
cout<<ans<<'\n';
}
}
cf自训6的更多相关文章
- cf自训4.10
cf933A dp题 一开始看错是连续子序列了,然后样例刚好能过.. 然后正解没想出来,网上看了题解:感觉正解是枚举2开始的位置,然后再枚举翻转的区间,pos左右两侧分别求出贡献最大的那个区间,左右两 ...
- 【春训团队赛第四场】补题 | MST上倍增 | LCA | DAG上最长路 | 思维 | 素数筛 | 找规律 | 计几 | 背包 | 并查集
春训团队赛第四场 ID A B C D E F G H I J K L M AC O O O O O O O O O 补题 ? ? O O 传送门 题目链接(CF Gym102021) 题解链接(pd ...
- ATC/TC/CF
10.25 去打 CF,然后被 CF 打了. CF EDU 75 A. Broken Keyboard 精神恍惚,WA 了一发. B. Binary Palindromes 比赛中的憨憨做法,考虑一个 ...
- Java企业实训 - 01 - Java前奏
前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...
- ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'
凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- cf Round 613
A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...
- ARC下OC对象和CF对象之间的桥接(bridge)
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...
- [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
随机推荐
- Python 关于在ubuntu部署Django项目
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
- MongpDB 学习手册 - 索引
//查看数据库以及容量 // show dbs //查看有哪些数据表 // show collections // MongoDB 索引 // 索引通常能够极大的提高查询的效率,如果没有索引,Mong ...
- 【Java编程思想笔记】-集合1
1.为什么要用集合? 一般情况下,数组是保存一组对象(或基本数据类型)最有效的方式.但是数组有着固定的尺寸,而在更一般的情况下,我们在写程序时不知道将需要保存多少个对象,或者是否需要更复杂的存储结构来 ...
- 20165234 《Java程序设计》第九周学习总结
第九周学习总结 教材内容学习 第十三章 Java 网络编程 URL 类 URL 类是 java.net 包中的一个重要的类,使用URL创建对象的应用程序称为客户端程序. 一个 URL 对象通常包含最基 ...
- Hadoop配置文件参数详解
core-site.xml <configuration> <property> <name>hadoop.tmp.dir</name> <val ...
- Django实战(一)-----用户登录与注册系统1(环境搭建)
一.背景 学了一段时间的语法,总感觉入不了门,所以找点小项目练练手,项目来自网络. 二.创建虚拟环境,并安装Django 使用Python中的virtualenv搭建一个mysite_env全新的环境 ...
- ActiveMQ静态网络链接(broker-to-broker)
ActiveMQ的网络连接分为静态连接和动态连接.本章研究静态连接. 1.ActiveMQ的networkConnector是什么 在某些情况下,需要多个ActiveMQ的Broker做集群,那么就涉 ...
- 数据库无法启动ORA-01034: ORACLE not available
错误场景: 1.数据库未启动,查询v$instance报错 SQL> select status from v$instance; select status from v$instance * ...
- (转载)深度学习的weight initialization
本文转自:谷歌工程师:聊一聊深度学习的weight initialization TLDR (or the take-away) Weight Initialization matters!!! 深度 ...
- dubbo的本地存根(Stub)
dubbo的本地存根的原理是:远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,那么就在服务消费者这一端提供了一个Stub类,然后当消费者调用provid ...