【题解】HAOI2008硬币购物

1A什么的实在是太开心啦~~洛谷P1450

这道题目主要是考察对于容斥原理的掌握。

首先,注意到如果不存在有关硬币数量的限制而单纯询问方案的总数,就是一个简单的完全背包。这个思路提醒我们:如果能够求出所有不合法的方案,是不是就可以相减得到我们想要的答案了呢?那么我们注意到:令A[i]为第i种硬币超出范围的方案总数,显然有A[i]=dp[s-(d[i]+1)*c[i]]:强行超出,注意d[i]+1因为可以达到d[i];剩下的就套容斥原理的公式即可:

 

代码:

#include <bits/stdc++.h>
using namespace std;
#define V 100000
#define ll long long
int s, c[5], T, a[5], d[5];;
ll dp[V + 9];
int read()
{
    int x = 0;
    char c;
    c = getchar();
    while(c < '0' || c > '9') c = getchar();
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x;
}

ll Get_Ans()
{
    ll ans = 0;
    for(int i = 1; i <= 4; i ++)
        a[i] = (d[i] + 1) * c[i];
    for(int i = 1; i <= 4; i ++)
        if(a[i] <= s) ans += dp[s - a[i]];
    for(int i = 1; i <= 4; i ++)
        for(int j = i + 1; j <= 4; j ++)
            if((a[i] + a[j]) <= s) ans -= dp[s - a[i] - a[j]];
    for(int i = 1; i <= 4; i ++)
        for(int j = i + 1; j <= 4; j ++)
            for(int k = j + 1; k <= 4; k ++)
                if(a[i] + a[j] + a[k] <= s) ans += dp[s - a[i] - a[j] - a[k]];
    if(a[1] + a[2] + a[3] + a[4] <= s) ans -= dp[s - a[1] - a[2] - a[3] - a[4]];
    return dp[s] - ans; 
}

int main()
{
    for(int i = 1; i <= 4; i ++) c[i] = read();
    T = read();
    dp[0] = 1;
    for(int i = 1; i <= 4; i ++)
        for(int j = c[i]; j <= V; j ++)
            dp[j] += dp[j - c[i]];
    for(int i = 1; i <= T; i ++)
    {
        for(int j = 1; j <= 4; j ++) d[j] = read();
        s = read();
        printf("%lld\n", Get_Ans());
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/twilight-sx/p/8417592.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园短期闲置资源置换平台是一种创新的在线服务系统,旨在促进校园内学生、教职工以及其他成员之间的资源共享和有效利用。通过这个平台,用户可以发布、查找并交换他们暂时不使用的资源,从而实现资源的最大化利用,减少浪费,并促进校园内的可持续生活方式。以下是该平台可能包含的一些关键特性: 1. **用户注册和认证**:用户需要通过校园身份验证进行注册,确保平台的使用者都是校园社区的成员。 2. **资源发布**:用户可以发布他们愿意短期出借或交换的资源,如书籍、运动器材、电子产品、家具等。 3. **资源搜索和筛选**:用户可以根据资源类型、状态、可用时间等条件搜索和筛选所需的资源。 4. **在线预订系统**:用户可以通过平台预订所需的资源,并约定取用和归还的时间和地点。 5. **评价和信誉系统**:用户可以对交易的对方进行评价,建立信誉体系,增加用户间的信任。 6. **即时通讯功能**:平台内置即时通讯工具,方便用户就资源交换的细节进行沟通。 7. **安全和隐私保护**:确保用户的个人信息和交易记录的安全,保护用户的隐私。 8. **移动应用支持**:开发移动应用程序,使用户能够随时随地访问平台,进行资源的发布和搜索。 9. **教育资源置换**:特别为教师和研究人员提供教育资源的置换服务,如实验材料、研究工具等。 10. **活动和研讨会空间**:平台还可以用于发布和预订校园内临时活动或研讨会所需的空间。 11. **环保意识提升**:通过平台的推广和使用,增强校园社区成员的环保意识和资源节约意识。 12. **数据分析和报告**:平台可以收集和分析资源使用数据,为校园管理层提供资源利用和需求的洞察,以优化资源配置。 校园短期闲置资源置换平台通过提供一个便捷、高效和安全的在线环境,鼓励校园成员参与资源共享,不仅能够促进资源的合理分配和循环利用,还能增强社区的凝聚力和互助精神。随着共享经济理念的普及,这样的平台在校园中的推广和应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值