标签:pen ace void 方向 getc 矩阵 数据 描述 clu
当发现自己竟然不会打dp的时候内心是崩溃的,然后按照一年前的刷题记录刷openjudge,然后发现自己准确率比一年前(刚学信竞两个月时)的准确率低得多,已经没救。
列一下最近打的几道sb题
//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn=30; int n,t,tot,a[maxn],dp[maxn][1010]; int aa;char cc; int read() { aa=0;cc=getchar(); while(cc<‘0‘||cc>‘9‘) cc=getchar(); while(cc>=‘0‘&&cc<=‘9‘) aa=aa*10+cc-‘0‘,cc=getchar(); return aa; } int main() { n=read();t=read(); for(int i=1;i<=n;++i) { a[i]=read(); if(a[i]>t) i--,n--; else tot+=a[i]; } if(tot<t) { printf("0"); return 0; } dp[0][0]=1; for(int i=1;i<=n;++i) { for(int j=0;j<=t-a[i];++j) if(dp[i-1][j]) dp[i][j+a[i]]+=dp[i-1][j]; for(int j=0;j<=t;++j) dp[i][j]+=dp[i-1][j]; } printf("%d",dp[n][t]); return 0; }
//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn=1000+10; int T,dp[maxn][maxn],lena,lenb; char a[maxn],b[maxn]; int main() { scanf("%d",&T); while(T--) { memset(dp,0x3f3f3f3f,sizeof(dp)); scanf("%s%s",a+1,b+1); lena=strlen(a+1); lenb=strlen(b+1); for(int i=0;i<=lena||i<=lenb;++i) dp[0][i]=dp[i][0]=i; for(int i=1;i<=lena;++i) for(int j=1;j<=lenb;++j) { if(a[i]==b[j]) dp[i][j]=min(dp[i-1][j-1],dp[i][j]);//直接配对 else dp[i][j]=min(dp[i-1][j-1]+1,dp[i][j]);//替换 dp[i][j]=min(dp[i][j-1]+1,dp[i][j]);//插入 dp[i][j]=min(dp[i-1][j]+1,dp[i][j]); } printf("%d\n",dp[lena][lenb]); } return 0; }
//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn=1000+10,maxnum=1e4+10; int n,x,sz[maxnum],num[maxnum],ans,nowans; int aa;char cc; int read() { aa=0;cc=getchar(); while(cc<‘0‘||cc>‘9‘) cc=getchar(); while(cc>=‘0‘&&cc<=‘9‘) aa=aa*10+cc-‘0‘,cc=getchar(); return aa; } int lb(int x) { return x&(-x); } int rs; int q(int pos) { rs=0; while(pos) { rs=max(rs,sz[pos]); pos-=lb(pos); } return rs; } void chge(int pos,int x) { while(pos<=1e4) { sz[pos]=max(sz[pos],x); pos+=lb(pos); } } int main() { n=read(); for(int i=1;i<=n;++i) { x=read(); if(x) nowans=q(x-1)+x; else nowans=0; ans=max(ans,nowans); if(nowans>num[x]) { num[x]=nowans; chge(x,nowans); } } printf("%d",ans); return 0; }
//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn=1e5+10,INF=1e7; int T,n,a[maxn],dd[maxn]; int aa,ff;char cc; int read() { aa=0;cc=getchar();ff=1; while(cc<‘0‘||cc>‘9‘) { if(cc==‘-‘) ff=-1; cc=getchar(); } while(cc>=‘0‘&&cc<=‘9‘) aa=aa*10+cc-‘0‘,cc=getchar(); return aa*ff; } int main() { T=read(); int num,ans,maxnum; while(T--) { n=read();ans=0;num=INF;maxnum=0; for(int i=1;i<=n;++i) { a[i]=read(); num=min(num,a[i]); dd[i]=max(a[i]-num,dd[i-1]); } num=-INF; for(int i=n;i;--i) { num=max(num,a[i]); maxnum=max(maxnum,num-a[i]); ans=max(ans,dd[i]+maxnum); } printf("%d\n",ans); } return 0; }
//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn=30; int n,dp[maxn][5]; int main() { scanf("%d",&n); dp[1][0]=dp[1][1]=dp[1][2]=1; for(int i=2;i<=n;++i) { dp[i][0]=dp[i-1][0]+dp[i-1][1]+dp[i-1][2]; dp[i][1]=dp[i-1][0]+dp[i-1][1]; dp[i][2]=dp[i-1][0]+dp[i-1][2]; } printf("%d",dp[n][0]+dp[n][1]+dp[n][2]); return 0; }
标签:pen ace void 方向 getc 矩阵 数据 描述 clu
原文地址:http://www.cnblogs.com/Serene-shixinyi/p/7474988.html