求优化代码

P4158 [SCOI2009] 粉刷匠

emm本人比你还蒟,只知道可以手动吸氧
by w23c3c3 @ 2018-08-17 19:14:50


@[Fee_cle6418](/space/show?uid=42156) 看了题解知道了:这题用滚动数组,压掉一维,就过了
by w23c3c3 @ 2018-08-17 19:18:17


@[Fee_cle6418](/space/show?uid=42156) 你的代码也可以不开$O_2$过的
by Viston @ 2018-09-11 15:41:28


@[Fee_cle6418](/space/show?uid=42156) 加上读you+输you+register+手写MAX就过了,无需O2优化。 ``` #include<bits/stdc++.h> #define ll long long using namespace std; inline int read(){ ll X=0,w=0; char ch=0; while(!isdigit(ch)) {w|=ch=='-';ch=getchar();} while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); return w?-X:X; } inline void write(ll x){ if(x<0)putchar('-'),x=-x; if(x>9)write(x/10); putchar(x%10+48); } inline int max(int a,int b){ return a>b?a:b; } int w[55][55][55],g[55][2505][55],f[55][2505]; char a[55][55]; int main() { int n,m,t; n=read(),m=read(),t=read(); for(register int i=1;i<=n;i++){ scanf("%s",a[i]+1); for(register int j=1;j<=m;j++) for(register int k=j;k<=m;k++){ int s1=0,s2=0; for(register int l=j;l<=k;l++)s1+=a[i][l]=='0',s2+=a[i][l]=='1'; w[i][j][k]=max(s1,s2); } } for(register int i=1;i<=n;i++)for(register int j=1;j<=t;j++) for(register int k=j;k<=m;k++)for(register int p=j-1;p<k;p++) g[i][j][k]=max(g[i][j][k],g[i][j-1][p]+w[i][p+1][k]); for(register int i=1;i<=n;i++) for(register int j=1;j<=t;j++) for(register int k=1;k<=j;k++) f[i][j]=max(f[i][j],f[i-1][j-k]+g[i][k][m]); write(f[n][t]); return 0; } ```
by Viston @ 2018-09-11 15:43:44


我觉得你还可以写一篇题解QAQ,绝对比题解区里的dalao玄学
by Viston @ 2018-09-11 15:54:46


有,我的算法复杂度是O(m*m*n)
by Bitoo @ 2023-10-07 20:41:10


|