萌新dp 28pts求调(AC #1,#2,#11,其余WA)
查看原帖
萌新dp 28pts求调(AC #1,#2,#11,其余WA)
536745
WaTleZero_pt楼主2023/4/3 22:19
#include<bits/stdc++.h>
using namespace std;
int n,m,kk,a[1010],x[1010];
int dp[110][110][2][1010];
int main(){
	scanf("%d%d%d",&n,&kk,&m);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&a[i],&x[i]);
	}
	for(int i=1;i<=n;i++){
		for(int k=1;k<=kk;k++){
			dp[i][0][0][k]=dp[i][0][0][k-1];
			if(k>=x[i]) dp[i][0][0][k]=dp[i-1][0][0][k-x[i]]+a[i];
			dp[i][0][1][k]=max(dp[i][0][1][k-1],dp[i-1][0][0][k]);
			if(k>=x[i]) dp[i][0][1][k]=max(dp[i][0][1][k],dp[i-1][0][1][k-x[i]]+a[i]);
		}
		for(int j=1;j<=m;j++){
			for(int k=1;k<=kk;k++){
				dp[i][j][0][k]=dp[i][j][0][k-1];
				if(k>=x[i]) dp[i][j][0][k]=max(dp[i-1][j][0][k-x[i]]+a[i],dp[i-1][j-1][0][k-x[i]]+a[i]*2);
				dp[i][j][1][k]=max(dp[i][j][1][k-1],dp[i-1][j][0][k]);
				if(k>=x[i]) dp[i][j][1][k]=max(dp[i][j][1][k],max(dp[i-1][j][1][k-x[i]]+a[i],dp[i-1][j-1][1][k-x[i]]+a[i]*2));
			}
		} 
	}
	printf("%d",dp[n][m][1][kk]);
}
2023/4/3 22:19
加载中...