函数最值

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
using namespace std;
int n;
long long a[maxn],ans,sum[maxn];
char s[maxn];
long long qread(){
int i=,j=;
char ch=getchar();
while(ch<''||ch>''){if(ch=='-')j=-;ch=getchar();}
while(ch<=''&&ch>='')i=i*+ch-'',ch=getchar();
return i*j;
}
int main(){
freopen("maximum.in","r",stdin);freopen("maximum.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++){
a[i]=qread();
sum[i]=sum[i-];
if(a[i]>)sum[i]=sum[i-]+a[i];
}
scanf("%s",s+);
long long c=;
for(int i=n;i>=;i--)//枚举从哪一位开始
if(s[i]==''){
ans=max(ans,c+sum[i-]);
c+=max(a[i],0LL);
}
ans=max(ans,c);
cout<<ans;
}

100分 贪心

函数最值2

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1010
using namespace std;
int n,k,a[maxn],pla[],cnt,b[maxn];
long long ans=;
int count(int x){
int res=;
while(x){
if(x&)res++;
x>>=;
}
return res;
}
bool pos[maxn];
long long Abs(long long x){
if(x>=)return x;
if(x<)return -x;
}
int main(){
freopen("minimum.in","r",stdin);freopen("minimum.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&k);
for(int i=;i<(<<n);i++)
if(count(i)==k)pla[++cnt]=i;
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=cnt;i++){
memset(pos,,sizeof(pos));
int p=;
int now=pla[i];
while(now){
p++;
if(now&)pos[p]=;
now>>=;
}
for(int j=;j<=n;j++){
if(pos[j]==||j==)b[j]=a[j];
else b[j]=b[j-];
}
long long sum=;
for(int j=;j<=n;j++){
sum=max(sum,Abs(b[j]-b[j-]));
}
ans=min(ans,sum);
}
cout<<ans;
}

20分 暴力

/*
二分两个数之间的差的最大值
F[i]表示i不改变的最小修改的元素个数
f[i]=min(f[j]+(i-j-1),i-1) abs(A[j]-A[i])<二分出来的答案*(i-j)
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define maxn 2010
using namespace std;
int n,k,a[maxn],f[maxn];
bool check(int x){
f[]=;
int ans=n;
for(int i=;i<=n;i++){
f[i]=i-;
for(int j=;j<i;j++)
if(abs(a[i]-a[j])<=1LL*x*(i-j))
f[i]=min(f[i],f[j]+(i-j-));//假设改了(j~i)的数
ans=min(ans,f[i]+n-i);//假设最后一个数改了
}
return ans<=k;
}
int main(){
freopen("minimum10.in","r",stdin);
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
int l=,r=,ans=;
while(l<=r){
int mid=(l+r)>>;
if(check(mid))ans=mid,r=mid-;
else l=mid+;
}
printf("%d",ans);
return ;
}

100分 二分+dp

序列

#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 100010
using namespace std;
int n,X,Y,sum[maxn];
bool ok[][];
char s[maxn];
int Gcd(int x,int y){
if(y==)return x;
return Gcd(y,x%y);
}
int main(){
freopen("sequence.in","r",stdin);freopen("sequence.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d%d%d",&n,&X,&Y);
scanf("%s",s+);
for(int i=;i<=n;i++){
sum[i]=sum[i-];
if(s[i]=='A')sum[i]=sum[i-]+;
}
for(int len=;len<=n;len++){//枚举长度
for(int l=;l+len-<=n;l++){
int r=l+len-;
int cntA=sum[r]-sum[l-];
int cntB=len-cntA;
int g=Gcd(cntA,cntB);
cntA/=g;cntB/=g;
if(cntA==X&&cntB==Y)ok[l][r]=;
}
}
int q;
scanf("%d",&q);
int l,r,ans;
while(q--){
scanf("%d%d",&l,&r);
bool flag=;
for(int len=r-l+;len>=;len--){
for(int i=l;i+len-<=r;i++){
int j=i+len-;
if(ok[i][j]){
ans=len;
flag=;
break;
}
}
if(flag)break;
}
printf("%d\n",ans);
}
}

25分 暴力

预计得分100++
实际得分100++
T1写了一个小时的数位dp,然后调不出来了,发现可以贪心,就写了贪心。T2T3看了没什么思路,T2前30分可以状压,T330分貌似爆搜就能过,可能代码写的丑
今天的暴力分都得的不全,希望能把暴力写的优美一点

小结

清北刷题冲刺 11-02 p.m的更多相关文章

  1. 清北刷题冲刺 11-03 a.m

    纸牌 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  2. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  3. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  4. 清北刷题冲刺 11-02 a.m

    卖书 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  5. 清北刷题冲刺 11-01 p.m

    轮换 #include<iostream> #include<cstdio> #include<cstring> #define maxn 1010 using n ...

  6. 清北刷题冲刺 10-31 a.m

    集合 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; ], ...

  7. 清北刷题冲刺 10-30 a.m

    星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...

  8. 清北刷题冲刺 10-29 p.m

    洗澡 /* 这个题不能单纯判断左括号和右括号的多少,而应该从左到右扫一遍,看应该如何配对 */ #include<iostream> #include<cstdio> #inc ...

  9. 清北刷题冲刺 10-28 p.m

    水题(贪心) (water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每 ...

  10. 清北刷题冲刺 10-28 a.m

    立方数 (cubic) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方 ...

随机推荐

  1. Python-获取前一条用例的执行结果

    import unittest,HTMLTestRunner from nose_parameterized import parameterized def login(username,passw ...

  2. codeforces 655B B. Mischievous Mess Makers(贪心)

    题目链接: B. Mischievous Mess Makers time limit per test 1 second memory limit per test 256 megabytes in ...

  3. Nhibernate 三种配置方式

    1 App.config 的配置: <?xml version="1.0" encoding="utf-8" ?><configuration ...

  4. bzoj 2594: 水管局长数据加强版 Link-Cut-Tree

    题目: Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公 ...

  5. yeoman,grunt,bower

    Yeoman主要有三部分组成:yo(脚手架工具).grunt(构建工具).bower(包管理器).这三个工具是分别独立开发的,但是需要配合使用,来实现我们高效的工作流模式. http://www.cn ...

  6. DNSmasq

    是一款轻便的主要用于个人电脑的DNS:占用的端口是53(和DNS服务的bind的端口一致):我之所以关注它,就是因为在安装DCOS的时候是不允许占用53端口:但是其实默认安装的CentOS几乎都有这个 ...

  7. Linux 系统通过 Squid 配置实现代理上网

    本文转载自:https://help.aliyun.com/knowledge_detail/41342.html Squid 介绍 Squid 是一个缓存 Internet 数据的软件,其接收用户的 ...

  8. Starting MySQL....The server quit without updating PID file错误解决办法

    出现错误:Starting MySQL....The server quit without updating PID file 检查错误文件: /var/lib/mysql/xxxx.err,根据其 ...

  9. shock编程

    Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程,必须理解Socket ...

  10. hibernate 持久化对象的生命周期

    持久化对象的生命周期 瞬态(自由态) 表示对象在内存中存在,在数据库中没有数据相关,比如刚刚new出来的一个对象 持久态 持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象 ...