思路大致就是把每一列看作给w重量时拿到v价值的物品
#include <bits/stdc++.h>
#define str string
using namespace std;
const int MAXN=205;
int val[MAXN][MAXN];
bool gve[MAXN][MAXN];
int dp[MAXN];
int v[MAXN][MAXN],g[MAXN][MAXN];
int n,m;
int main(){
int k;
cin>>n>>m>>k;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
char x;
cin>>val[i][j]>>x;
gve[i][j]=(x=='N'?0:1);
}
}
for(int i=1;i<=m;++i)
for(int b=1;b<=n;++b){
int bu=b,j=n;
while(j && bu){
v[i][b]+=val[j][i];
if(gve[j][i]) g[i][b]++;
bu--;
j--;
}
}
// for(int i=1;i<=m;++i){
// for(int j=1;j<=n;++j)
// printf("%d ",v[i][j]);
// printf("\n");
// }
for(int i=1;i<=m;++i)
for(int j=k;j>=0;--j)
for(int l=0;l<=j;++l)
dp[j]=max(dp[j],dp[j-l+g[i][l]]+v[i][l]);
printf("%d",dp[k]);
return 0;
}