不是很理解这篇题解
查看原帖
不是很理解这篇题解
320697
AMIRIOX無暝楼主2020/11/27 20:27

https://www.luogu.com.cn/blog/Original-intention/solution-p1507

关于这两份代码:

//测试题解
#include<bits/stdc++.h>
#define chengxiaoke is so cute
using namespace std;
int dp[1001][1001],v,n,a[1001],b[1001],c[1001],k;
int main()
{
	cin>>v>>n>>k;//v体积,n质量,k个数
	for(int i=1;i<=k;i++) cin>>a[i]>>b[i]>>c[i];//输入
    // 这里是i<=k
	for(int i=1;i<=k;i++) for(int j=v;j>=a[i];j--) for(int t=n;t>=b[i];t--) dp[j][t]=max(dp[j][t],dp[j-a[i]][t-b[i]]+c[i]);//状态转移方程
	cout<<dp[v][n];//输出
	return 0;//完美结束
}
//测试题解
#include<bits/stdc++.h>
#define chengxiaoke is so cute
using namespace std;
int dp[1001][1001],v,n,a[1001],b[1001],c[1001],k;
int main()
{
	cin>>v>>n>>k;//v体积,n质量,k个数
	for(int i=1;i<=k;i++) cin>>a[i]>>b[i]>>c[i];//输入
    //这里是i<=n
	for(int i=1;i<=n;i++) for(int j=v;j>=a[i];j--) for(int t=n;t>=b[i];t--) dp[j][t]=max(dp[j][t],dp[j-a[i]][t-b[i]]+c[i]);//状态转移方程
	cout<<dp[v][n];//输出
	return 0;//完美结束
}

照01背包的思维来看 应该是先枚举物品? 但他的输入里第三个物品总数是k 不应该是枚举k吗? 而且看dp式子dp[j][t]也能看出来第一层循环应该是物品(这个是两个条件限定, 并用了滚动数组降维优化), 但是那个地方无论是k还是n都可以AC 为什么呢?

2020/11/27 20:27
加载中...