首页 > 其他分享 >P1450 [HAOI2008] 硬币购物

P1450 [HAOI2008] 硬币购物

时间:2023-02-16 21:22:21浏览次数:32  
标签:std cnt P1450 硬币 ji ans for1 dp HAOI2008

完全背包加上容斥,思想非常妙

#include <bits/stdc++.h>
#define for1(i,a,b) for (int i = a;i <= b;i ++) 
#define ll long long

const int maxn = 1e5+5;
const int inf = 99824353;
long long dp[maxn+10];
int c[10],d[10],T;
int sum;
ll ans;
int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    for1(i,1,4)
		std::cin>>c[i];
    dp[0] = 1;//0的方案数:不取 
    for1(i,1,4)//完全背包 
		for1(j,c[i],maxn)
			dp[j] += dp[j-c[i]];
			
	std::cin>>T; 
    while (T--)
	{
		ans = 0;
        for1(i,1,4)
			std::cin>> d[i];
        std::cin>>sum;
        for1(i,0,15)//容斥 
		{
            ll ji = sum;
            int cnt = 0;
            
            for1(j,1,4)
				if ((i>>(j - 1)) & 1)
				{
					ji -= c[j] * (d[j] + 1);
					cnt^=1;
				}
            if (ji < 0) continue;
            if (!cnt) //单数个就加,双数个就减 
				ans += dp[ji];
			else 
				ans -= dp[ji];
        }
        std::cout<<ans<<'\n';
    }
    return 0;
}

标签:std,cnt,P1450,硬币,ji,ans,for1,dp,HAOI2008
From: https://www.cnblogs.com/yyx525jia/p/17128361.html

相关文章

  • 翻硬币 【 字符串 | 思维 】
    翻硬币Description小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用*表示正面,用o表示反面(是小写字母,不是零)。比如,可能情形是:**oo***oooo如果同时翻......
  • 3601、排列硬币
    你总共有n枚硬币,并计划将它们按阶梯状排列。对于一个由k行组成的阶梯,其第i行必须正好有i枚硬币。阶梯的最后一行可能是不完整的。给你一个数字n,计算并返回可形......
  • ★★翻滚吧硬币★★
    ★★翻滚吧硬币★★题意:任取两枚硬币固定在二维平面上,并让它们恰好相切,用第三枚硬币沿着它们形成的边界进行翻滚,即时刻保证与至少一枚已固定的硬币相切。这样这枚运动的......
  • #yyds干货盘点# LeetCode程序员面试金典:硬币
    题目:硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1:输入:n=5输出:2解释:有两......
  • 用一角、两角和五角的硬币凑出10元一下的金额 接力break
    #include<stdio.h>intmai(){   intx;   intone,two,five;   intexit=0;    scanf("%d",&x);   for(one=1;one<x*10;one++){  ......
  • 蓝桥杯题目——翻硬币无需修改‘*’与’o‘的特殊解法及其所包含的思想
    前言本文介绍蓝桥杯题目——翻硬币的一种无需对字符串进行操作的解法及该解法所包含的思想。题目信息桌上放着排成一排的若干硬币。我们用*表示正面,用o表示反面(是小......
  • 翻硬币
    问题描述小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用*表示正面,用o表示反面(是小写字母,不是零)。比如,可能情形是:**oo***oooo如果同时翻转左......
  • 力扣---1561. 你可以获得的最大硬币数目
    有3n堆数目不一的硬币,你和你的朋友们打算按以下方式分硬币:   每一轮中,你将会选出任意3堆硬币(不一定连续)。   Alice将会取走硬币数量最多的那一堆。   你......
  • 澳洲纽扣电池、硬币电池IEC60086-4标准
    虽然新法规还未正式强制执行,但是亚马逊澳大利亚站早已发布了对含有纽扣电池或硬币电池的商品的相关要求。要求内容<<<<根据亚马逊政策,通过亚马逊网站销售的含有纽扣电池或硬......
  • P8597 [蓝桥杯 2013 省 B] 翻硬币
    题目描述桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo,如果同时翻转左边的两个硬币,则变为 oooo***ooo......