求助
  • 板块P1174 打砖块
  • 楼主shAdomOvO
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/9/11 14:44
  • 上次更新2023/11/4 07:05:16
查看原帖
求助
467442
shAdomOvO楼主2021/9/11 14:44

只有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;
}
2021/9/11 14:44
加载中...