社区讨论

用二维dp数组为什么25WA

P5662[CSP-J 2019] 纪念品参与者 5已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m0xg2mrq
此快照首次捕获于
2024/09/11 13:53
去年
此快照最后确认于
2025/11/04 21:24
4 个月前
查看原帖
25WA
CPP
#include<bits/stdc++.h>
using namespace std;
int dp[105][10005],n,m,t,L,a[105][105];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t>>n>>m;
	L=m;
	for(int i=1;i<=t;++i)
	{
		for(int j=1;j<=n;++j)cin>>a[i][j];
	}
	for(int i=1;i<t;++i) 
	{
		for(int j=1;j<=n;++j)
		{
			for(int k=0;k<=L;++k)
			{
				if(k>=a[i][j])dp[j][k]=max(dp[j][k],dp[j][k-a[i][j]]+a[i+1][j]-a[i][j]);
			}
		}
		L+=dp[n][L];
		memset(dp,0,sizeof(dp));
	}
	cout<<L;
	return 0;
 } 
100AC
CPP
#include<bits/stdc++.h>
using namespace std;
int dp[10005],n,m,t,L,a[105][105];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t>>n>>m;
	L=m;
	for(int i=1;i<=t;++i)
	{
		for(int j=1;j<=n;++j)cin>>a[i][j];
	}
	for(int i=1;i<=t;++i) 
	{
		for(int j=1;j<=n;++j)
		{
			for(int k=0;k<=L;++k)
			{
				if(k>=a[i][j])dp[k]=max(dp[k],dp[k-a[i][j]]+a[i+1][j]-a[i][j]);
			}
		}
		L+=dp[L];
		memset(dp,0,sizeof(dp));
	}
	cout<<L;
	return 0;
 } 
新手求原因T_T

回复

5 条回复,欢迎继续交流。

正在加载回复...