AC日记——砝码称重 洛谷 P2347

题目描述

设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),

输入输出格式

输入格式:

输入方式:a1 a2 a3 a4 a5 a6

(表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个)

输出格式:

输出方式:Total=N

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

输入输出样例

输入样例#1:
1 1 0 0 0 0
输出样例#1:
Total=3

思路:

  水题使我快乐;

来,上代码:

#include <cstdio>
#include <iostream>

using namespace std;

int if_z,vi[10],ci[10],m,dp[1005],ans;

char Cget;

inline void in(int &now)
{
    now=0,if_z=1,Cget=getchar();
    while(Cget>'9'||Cget<'0')
    {
        if(Cget=='-') if_z=-1;
        Cget=getchar();
    }
    while(Cget>='0'&&Cget<='9')
    {
        now=now*10+Cget-'0';
        Cget=getchar();
    }
    now*=if_z;
}

int main()
{
    ci[1]=1,ci[2]=2,ci[3]=3,ci[4]=5,ci[5]=10,ci[6]=20;
    for(int i=1;i<=6;i++)
    {
        in(vi[i]);
        m+=vi[i]*ci[i];
    }
    dp[0]=1;
    for(int i=1;i<=6;i++)
    {
        for(int j=1;j<=vi[i];j++)
        {
            for(int v=m;v>=ci[i];v--) dp[v]=max(dp[v],dp[v-ci[i]]);
        }
    }
    for(int i=1;i<=m;i++) if(dp[i]) ans++;
    cout<<"Total="<<ans;
    return 0;
}
原文地址:https://www.cnblogs.com/IUUUUUUUskyyy/p/6485889.html