50分求调(讨论区hack全过)
  • 板块P1174 打砖块
  • 楼主w9095
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/2/12 14:24
  • 上次更新2023/10/24 00:59:26
查看原帖
50分求调(讨论区hack全过)
569235
w9095楼主2023/2/12 14:24
#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,no=0;
         for(int j=n-1;j>=0;j--)
             {
             tol+=z[j][i];
             if(!y[i][j])no++;
			 if(!y[j+1][i])d++;
			 huan=d-no;
			 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;
}

悬赏关注

2023/2/12 14:24
加载中...