HDUOJ求助 分组背包模板题
  • 板块学术版
  • 楼主WiDayn
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/9/13 16:43
  • 上次更新2023/10/27 11:44:44
查看原帖
HDUOJ求助 分组背包模板题
558500
WiDayn楼主2022/9/13 16:43

RT

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1712

代码如下,大概就是一种有滚动数组一种没有

感觉两种应该是一样的但是只有一种能过,求助大佬两个有什么区别....

感谢!

#include<bits/stdc++.h>
using namespace std;

int n,m;
const int N = 1100;
int a[N][N];
int dp[N][N]; 

void solve(){
	int ans = 0;
	memset(dp, 0, sizeof dp);

	// 这是我写的版本,无滚动数组优化wa
	for(int i = 1; i <= n; i++){
		for(int j = m; j >= 0; j--){
			for(int k = 1; k <= j; k++){
				dp[i][j] = max(dp[i][j], dp[i - 1][j - k] + a[i][k]);
			}
		}
	}

// 这是滚动数组版本,能过
//	for(int i=1;i<=n;i++)
//		for(int j=m;j>=0;j--)
//	  		for(int k=1;k<=j;k++)
//	   	  		dp[j] = max(dp[j],dp[j-k]+a[i][k]);

	cout<<dp[n][m]<<'\n';	
} 

int main(){
	while(cin>>n>>m){
		if(!n&&!m) break;
		for(int i = 1; i <= n; i++){
			for(int j = 1; j <= m; j++){
				scanf("%d", &a[i][j]);
			}
		}
		solve();
	}
} 
2022/9/13 16:43
加载中...