函数最值

#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. PHP 写入缓存

    1.创建file.PHP <?php class File{ //封装方法 private $_dir; const EXT='.text';//文件后缀,定义为常量 public functi ...

  2. hibernate的update、merge和saveOrUpdate的区别(转)

    1.首先 saveOrUpdate返回void 也就是什么都不返回 而merge会返回一个对象 2.其次 saveOrUpdate的做法是:自动判断该对象是否曾经持久化过,如果曾持久化过则使用upda ...

  3. poj3630 Phone List (trie树模板题)

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26328   Accepted: 7938 Descr ...

  4. JAVA中的优化技巧(适用Android)

    最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Ja ...

  5. ACM学习历程—HDU5585 Numbers(数论 || 大数)(BestCoder Round #64 (div.2) 1001)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5585 题目大意就是求大数是否能被2,3,5整除. 我直接上了Java大数,不过可以对末尾来判断2和5, ...

  6. 在oracle中,select语句查询字段中非纯数字值

    最近,将原来的数字符字段转换为数字时,总报错误:无效数字. 如何找出其中哪些是非数字字符的记录?比较麻烦的事.下面是用Oracle DB自带的函数translate可以找出来的 1.创建测试表 Cre ...

  7. UML Design Via Visual Studio-Class Diagram

    用过几个建模设计工具,小的有staruml,大的有rational rose,EA.最后发现还是Visual Studio建模比较舒服(个人观点,不要争论). 打算对自己经常用的几个建模图做一个介绍, ...

  8. 【转】 Pro Android学习笔记(七三):HTTP服务(7):AndroidHttpClient

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csdn.net/flowingflying/ 不知道此文是否是这个系列中最短的一篇.我们 ...

  9. Java类的生命周期(转)

    引言 最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前国内java方面的教材大多只是告 ...

  10. 安装pyenv版本管理

    系统:Centos7.4 安装pyenv是为了更好的管理python的版本. 在进行安装操作之前,首先使用普通用户test,进行操作,如下: #安装之前先安装依赖的库 [test@localhost ...