泛化物品 70pts 求条
  • 板块P1174 打砖块
  • 楼主li_cat
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/1 21:00
  • 上次更新2024/10/2 08:18:16
查看原帖
泛化物品 70pts 求条
631544
li_cat楼主2024/10/1 21:00

思路大致就是把每一列看作给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;
}
2024/10/1 21:00
加载中...