70分求救
  • 板块P1174 打砖块
  • 楼主BlueSky_
  • 当前回复7
  • 已保存回复7
  • 发布时间2021/5/27 22:57
  • 上次更新2023/11/4 22:38:29
查看原帖
70分求救
506081
BlueSky_楼主2021/5/27 22:57
#include<bits/stdc++.h>
using namespace std;

int a[211][211],n,m,k,t[211],num;
long long dp[211][300][211],maxx[211][211];
bool b[211][211];
char c[211][211];

int main(){
	cin>>n>>m>>k;
	int i=0,j=0,l=0;
	for(i=n;i>=1;i--){
		for(j=1;j<=m;j++){
			cin>>a[i][j]>>c[i][j];
			if(c[i][j]=='N') b[i][j]=0;
			else b[i][j]=1;
		}
	}
	for(i=1;i<=m;i++){
		for(l=0;l<=k;l++){
			t[i]=0;
			for(j=0;j<=min(l+t[i]+(b[j][i]==1&&l<k),n);j++){
				num+=a[j][i];
				if(b[j][i]==1){
					t[i]++;
				}
				dp[i][l][j]=max(dp[i][l][j],maxx[i-1][l-j+t[i]]+num);
				maxx[i][l]=max(maxx[i][l],dp[i][l][j]);
			}
			num=0;
		}
	}
	long long ans=0;
	for(i=1;i<=m;i++)
		for(l=0;l<=k;l++)
			for(j=0;j<=n;j++)
				ans=max(ans,dp[i][l][j]);
				
	cout<<ans;
	return 0;
}
'''
2021/5/27 22:57
加载中...