P4158 区间dp WA 30pts 求调
  • 板块学术版
  • 楼主Polaris_flame
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/8/8 11:10
  • 上次更新2023/11/3 05:14:19
查看原帖
P4158 区间dp WA 30pts 求调
1046448
Polaris_flame楼主2023/8/8 11:10

题目link

#include<bits/stdc++.h>
#define FL(i,a,b) for(int i=(a);i<=(b);i++)
#define FR(i,a,b) for(int i=(a);i>=(b);i--)
#define ll long long
using namespace std;
const int MAXN = 50 + 5;
const int MR = 25e2 + 10;
int cnt=0;
int dp[MAXN][MAXN][MR],sum[MAXN][MAXN];
char s[MAXN];
int f[MR];
int main(){
	int n,m,T;
	scanf("%d%d%d",&n,&m,&T);
	FL(i,1,n){
		scanf("%s",s+1);
		FL(j,1,m) sum[i][j]=sum[i][j-1]+s[j]-'0';
	}
	FL(i,1,n){
		FL(j,1,m){
			FL(k,1,i){
				FL(t,k-1,i-1){
					dp[i][j][k]=max(dp[i][j][k],dp[i][t][k-1]+max(sum[i][j]-sum[i][t],(j-t)-(sum[i][j]-sum[i][t])));
					//printf("dp[%d][%d][%d]=%d\n",i,j,k,dp[i][j][k]);
				}
			}
		}
	}
	FL(i,1,n){
		FR(j,T,0){
			FL(k,1,min(m,j)){
				f[j]=max(f[j],f[j-k]+dp[i][m][k]);
				//printf("f[%d]=%d\n",j,f[j]);
			}
		}
	}	
	printf("%d",f[T]);
	return 0;
}

2023/8/8 11:10
加载中...