奇怪的RE
  • 板块学术版
  • 楼主syr1125
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/23 21:10
  • 上次更新2024/5/24 08:41:20
查看原帖
奇怪的RE
561949
syr1125楼主2024/5/23 21:10
#include <bits/stdc++.h>
using namespace std;

int n, a[20], dp[40000], sum[40000];

int popcount(int x)
{
	int cnt = 0;
	while (x)
	{
		x = x & (x - 1);
		cnt ++;
	}
	return cnt;
}

int main()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i ++)
	{
		scanf("%d", &a[i]);
	}

	for (int i = 0; i < (1 << n); i ++)
	{
		int t = i;
		for (int j = 1; j <= n; j ++)
		{
			if (t % 2 == 1)
			{
				sum[i] += a[j];
			}
			t /= 2;
		}
	}
	
//	for (int i = 0; i < (1 << n); i ++)
//	{
//		cout << sum[i] << " ";
//	}
//	cout << endl;
	
	memset(dp, 0x3f, sizeof dp);
	dp[0] = 0;
	for (int k = 1; k <= n; k ++)
	{
		for (int i = 0; i < (1 << n); i ++)
		{
			if (popcount(i) == k - 1)
			{
				for (int j = 0; j < n; j ++)
				{
					if ((i >> j) % 2 == 0)
					{
						//cout << i << " " << dp[i] << " " << a[j + 1] << " " << sum[i] << endl;
						dp[i + (1 << j)] = min(dp[i + (1 << j)], dp[i] + max(0, a[j + 1] - sum[i] % 1000));
					}
				}
			}
		} 
	}
	cout << dp[(1 << n) - 1]; 
	return 0;
}

这是代码,不知为何,RE了

题面

有一家商店正在做促销,出售N个产品,第i个产品的标价为M[i]元。

促销内容为:每次购买都会获得“您迄今为止购买的商品的标价总和%100的折扣。

但是,如果您购买的商品折扣后价格低于 0元,则将以 0元购买。

你每个产品都需要 1个,可以按照任意顺序购买,每次只能买 1个产品。你想知道最少需要花多少元。

2024/5/23 21:10
加载中...