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的更多相关文章

  1. cf自训4.10

    cf933A dp题 一开始看错是连续子序列了,然后样例刚好能过.. 然后正解没想出来,网上看了题解:感觉正解是枚举2开始的位置,然后再枚举翻转的区间,pos左右两侧分别求出贡献最大的那个区间,左右两 ...

  2. 【春训团队赛第四场】补题 | 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 ...

  3. ATC/TC/CF

    10.25 去打 CF,然后被 CF 打了. CF EDU 75 A. Broken Keyboard 精神恍惚,WA 了一发. B. Binary Palindromes 比赛中的憨憨做法,考虑一个 ...

  4. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  5. 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 ...

  6. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  7. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  8. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  9. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

随机推荐

  1. 剑指Offer题解索引

    数组 数组中重复的数字 二维数组中的查找 构建乘积数组 字符串 替换空格 字符流中第一个不重复的字符 表示数值的字符串 递归和循环 斐波那契数列 跳台阶 变态跳台阶 矩形覆盖 链表 从尾到头打印链表 ...

  2. (4)java数据结构--集合类及其数据结构归纳-有大图

    Java集合类及其数据结构归纳 - s小小的我 - 博客园http://www.cnblogs.com/shidejia/p/6433788.html ---------大图可以 在新标签中打开图片 ...

  3. 二叉查找树(Binary Search Tree)

    二叉树的一个重要的应用是他们在查找中的使用. 以下是二叉查找树的查找代码 #include <stdio.h> int main() { typedef struct Node{ int ...

  4. 2017-2018-2 20165221 实验三《敏捷开发与XP实践》实验报告

    实验报告封面 姓名:谭笑 学号:20165221 班级:1652班 实验名称: JAVA--敏捷开发与XP实践 指导老师:娄嘉鹏 试验时间:15:35--17:15 实验性质:选修 实验组次:21 实 ...

  5. python中的多重循环

    列表中会经常用到多重循环. if __name__=='__main__': names = ['xiaoming','wangwu','lisi'] ages = ['] for name,age ...

  6. 用ARX自定义实体

      本文介绍了构造自定义实体的步骤.必须继承的函数和必须注意的事项 1.新建一个从AcDbEntity继承的类,如EntTest,必须添加的头文件: "stdarx.h",&quo ...

  7. boost.log在项目中应用

    //头文件#pragma once #include <string> #include <boost/log/trivial.hpp> using std::string; ...

  8. struts2框架之输入校验(参考第二天学习笔记)

    输入校验: 1. 分类 客户端校验:javascript,它是用户体验而已,可以绕开. 服务器端校验 * 代码校验 1). 要求Action必须继承ActionSupport 2). 重写Action ...

  9. 带jdk15类似的jar配置

    针对部分jar文件名带有jdk15结尾的依赖配置时,需要添加<classifier>标签进行区分 比如针对:json-lib-2.4-jdk15.jar的jar依赖配置 <depen ...

  10. Cassandra索引详解

    转自: https://www.cnblogs.com/bonelee/p/6278943.html 1.什么是二级索引? 我们前面已经介绍过Cassandra之中有各种Key,比如Primary K ...