50分求调(讨论区hack全过)

P1174 打砖块

70分做法,未过讨论区hack ```cpp #include <bits/stdc++.h> using namespace std; int n,m,k,z[300][300],y[300][300],c[50000],v[50000],h[50000],f[50000],cnt=0; vector<int>zu[300]; int main() { scanf("%d%d%d",&n,&m,&k); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { scanf("%d",&z[i][j]); char ch=0; while(ch!='Y'&&ch!='N')ch=getchar(); if(ch=='Y')y[i][j]=1; else y[i][j]=0; } for(int i=0;i<m;i++) { int tol=0,d=0,huan=0; for(int j=n-1;j>=0;j--) tol+=z[j][i],d++,huan+=y[j][i],c[cnt]=tol,v[cnt]=d,h[cnt]=huan,zu[i].push_back(cnt),cnt++; } for(int i=0;i<m;i++) { int l=zu[i].size(); for(int j=k;j>=0;j--) for(int t=0;t<l;t++) if(j>=v[zu[i][t]])f[j]=max(f[j],f[j-v[zu[i][t]]+h[zu[i][t]]]+c[zu[i][t]]); } printf("%d",f[k]); return 0; } ```
by w9095 @ 2023-02-12 14:25:11


|