题目:
存钱罐
存钱罐
代码如下:

#include<bits/stdc++.h>
using namespace std;
#define NIL 0x3f3f3f3f
int p[505],w[505],dp[10005];//dp[i]:重量为i时最小价值 
int main()
{
	int n,e,f,v;
	cin >> e >> f;
	cin >> n;
	memset(dp,NIL,sizeof(dp));
	v = f - e;
	dp[0] = 0;
	for(int i = 0;i < n;i++) cin >> p[i] >> w[i];
	for(int i = 0;i < n;i++)
		for(int j = w[i];j <= v;j++)
			dp[j] = min(dp[j],dp[j - w[i]] + p[i]);
	if(dp[v] != NIL) cout << dp[v];
	else cout << "impossible." << endl;
	return 0;
}

这是一道完全背包问题,这里要正好凑够重量,所以先将dp[i]赋值为最大值,每次选取较小的那个,如果最后dp[v]不等于最大值那就证明可以凑出,否则输出不可能。

相关文章:

  • 2021-06-05
  • 2021-05-21
  • 2021-10-31
  • 2021-09-30
  • 2021-05-17
  • 2021-05-22
  • 2022-12-23
  • 2021-06-13
猜你喜欢
  • 2021-05-21
  • 2021-11-15
  • 2022-01-20
  • 2022-12-23
  • 2022-12-23
  • 2021-08-15
  • 2022-12-23
相关资源
相似解决方案