50分求助,实在看不出问题
查看原帖
50分求助,实在看不出问题
36502
dudujerry楼主2021/5/14 19:26
#include <cstdio>
#include <cstring>

const int MAXN = 102;

struct DP{
	int a,b[MAXN];
};

DP ff[MAXN][MAXN];//ij表示到第i个花瓶插到了j束花的最大美学值 
int b[MAXN][MAXN];//花束i插到花瓶j的美学值 
int f,v;

inline int oi_max(int a,int b){
	return a>b?a:b;
}
 
int main()
{
	scanf("%d%d",&f,&v);
	for(int i = 1; i <= f ; i ++){
		for(int j = 1 ; j <= v; j ++){
			scanf("%d",&b[i][j]);
			ff[j][i].a = -2139062144;
		}
	} 
	
	for(int i = 1; i <= v; i ++){
		for(int j = 1; j <= i && j <= f; j ++){
			ff[i][j].a = oi_max(ff[i-1][j].a,ff[i-1][j-1].a+b[j][i]);
			if(ff[i][j].a == ff[i-1][j-1].a+b[j][i]){
				for(int k = 1; k < j ; k++){
					ff[i][j].b[k] = ff[i-1][j-1].b[k];
				}
				ff[i][j].b[j] = i;
			}
			else{
				for(int k = 1; k <= j ; k++){
					ff[i][j].b[k] = ff[i-1][j].b[k];
				}
			}
		}
	}
	
	/*int mx = 0;
	int j = 0;
	for(int i = 1; i <= f; i++){
		mx = oi_max(ff[v][i].a,mx);
		if(mx == ff[v][i].a) j = i;
	}
	printf("%d\n",mx);*/
	printf("%d\n",ff[v][f].a);
	for(int i = 1; i <= f;i ++){
		if(ff[v][f].b[i] != 0)
			printf("%d ",ff[v][f].b[i]);
		else
			printf("?%d?",i);
	}
	return 0;
}

rt,第二个点我只输出了49束花,怎么也找不出来为什么第一束花程序没有考虑

2021/5/14 19:26
加载中...