有一点玄学的问题(背包状态转移方程)
  • 板块学术版
  • 楼主Xiao_heihei
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/1/15 15:06
  • 上次更新2023/10/24 04:08:27
查看原帖
有一点玄学的问题(背包状态转移方程)
766111
Xiao_heihei楼主2023/1/15 15:06

P1060 [NOIP2006 普及组] 开心的金明

rt,状态转移方程处,我用dp[j]来存结果
第一次循环,dp[j]=0dp[j]=0dp[jv]+zong[i]dp[j-v]+zong[i] =1600,因为 max 在,dp[j]应为1600
但是循环完后 dp[j]dp[j] 仍然为0
尝试过不用 max 直接让 dp[j]dp[j] 等于 dp[jv]+zong[i]dp[j-v]+zong[i] ,还是无法赋值
蒟蒻实在懵了,请问如何解决,谢谢!!

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxn=5005;
int i,j,dp[maxn],zong[maxn];
int main(){
	int money,num,v,p;
	cin>>money>>num;
	for(int i=0;i<num;i++){
		scanf("%d%d",&v,&p);
		zong[i]=v*p;
	}
	for(int i=1;i<=num;i++){
		for(int j=money;j>=v;j--){
			if(j >= v)
				dp[j]=max(dp[j],dp[j-v]+zong[i]);
		}
	}
	cout<<dp[num];
	return 0;
}
2023/1/15 15:06
加载中...