只有50分,感觉没错
#include<bits/stdc++.h>
using namespace std;
int n,m,sum[210][210],i,j,k,f[300][300],ans[210][210],t,maxn;//f[j][i]表示打第j列用i发子弹能得多少分
char a[210][210];
int main(){
cin>>n>>m>>k;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
cin>>sum[i][j];
getchar();
cin>>a[i][j];
}
for(j=1;j<=m;j++){//计算每一列
t=0;
for(i=n;i>=1;i--){
if(a[i][j]=='N'){
t++;
f[j][t]=f[j][t-1]+sum[i][j];
}
else f[j][t]+=sum[i][j];
}
}
for(j=1;j<=m;j++)
for(i=0;i<=k;i++)
for(t=0;t<=i&&t<=n;t++){
if(t>0)ans[j][i]=max(ans[j][i],ans[j-1][i-t]+f[j][t]);
else ans[j][i]=max(ans[j-1][i],ans[j-1][i-t]+f[j][t]);
}
cout<<ans[m][k];
return 0;
}