【洛谷 2347】[NOIP1996 提高组] 砝码称重

题目描述

设有 1g1g、2g2g、3g3g、5g5g、10g10g、20g20g 的砝码各若干枚(其总重≤10001000),可以表示成多少种重量?

输入格式

输入方式:�1,�2,�3,�4,�5,�6a1,a2,a3,a4,a5,a6

(表示 1g1g 砝码有 �1a1 个,2g2g 砝码有 �2a2 个,…,20g20g 砝码有 �6a6 个)

输出格式

输出方式:Total=N

N 表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)

输入输出样例

输入 #1
1 1 0 0 0 0
输出 #1
Total=3

说明/提示

【题目来源】

NOIP 1996 提高组第四题

题解:复习一下背包问题,为下一题做铺垫 很古老的一道noip题

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<bits/stdc++.h>
using namespace std;
int b[8],dp[1002];
int ans,sum; 
int a[8]={0,1,2,3,5,10,20};
int main(){
    freopen("2347.in","r",stdin);
    freopen("2347.out","w",stdout);
    for(int i=1;i<=6;i++){
        scanf("%d",&b[i]);
        sum+=a[i]*b[i];
    }
    dp[0]=1;
    for(int i=1;i<=6;i++){
        for(int j=sum;j>=0;j--){
            for(int k=1;k<=b[i];k++){
                if(j-a[i]*k>=0){
                    if(dp[j-a[i]*k]==1 && dp[j]==0) {
                       ans++; dp[j]=1;
                    }
                }
            }
        }
    }
    printf("Total=%d",ans);
    return 0;
}

 

posted @ 2023-10-25 16:09  #Cookies#  阅读(57)  评论(0编辑  收藏  举报