社区讨论

三维背包,一个60一个100 有啥区别

P1855榨取kkksc03参与者 3已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@lobpj4yh
此快照首次捕获于
2023/10/30 00:50
2 年前
此快照最后确认于
2023/11/04 05:30
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

int n,m,t;
int c1[101],c2[101]; //两种开销 
int dp[101][201][201]; //前i个,花费不超过j,时间不超过k时最值

int main()
{
	cin >> n >> m >> t;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&c1[i],&c2[i]);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=m;j>=c1[i];j--)
		{
			for(int k=t;k>=c2[i];k--)
				dp[i][j][k] = max(dp[i-1][j][k],dp[i-1][j-c1[i]][k-c2[i]] + 1);
		}
	}
	cout << dp[n][m][t] <<endl;
	return 0;
}
以上60分
CPP
#include <bits/stdc++.h>
using namespace std;

int n,m,t;
int c1[101],c2[101]; //两种开销 
int dp[101][201][201]; //前i个,花费不超过j,时间不超过k时最值

int main()
{
	cin >> n >> m >> t;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&c1[i],&c2[i]);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=m;j>=0;j--)
		{
			for(int k=t;k>=0;k--)
			{
				if(j >= c1[i] && k >= c2[i])
					dp[i][j][k] = max(dp[i-1][j][k],dp[i-1][j-c1[i]][k-c2[i]] + 1);
				else dp[i][j][k] = dp[i-1][j][k];
			}
				
		}
	}
	cout << dp[n][m][t] <<endl;
	return 0;
}
100分

回复

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

正在加载回复...