51: 校赛题:DG之实验室里的闲人

51: 校赛题:DG之实验室里的闲人

时间限制: 1 Sec   内存限制: 128 MB
提交: 221   解决: 42
[ 提交][ 状态][ 讨论版]

题目描述

DG生平最怕的就是物理实验,没想到跑到东大来还是摆脱不了做实验的命运,所以说DG每次去实验室都是打酱油,然后等验收的高峰期,趁着老师不注意偷偷观摩下左右的同学的数据•••
这次实验要用到天平,旁边放着重1g、2g、3g、5g、10g、20g的6种砝码,每种砝码的数目分别为a1,a2…a6(其总重<=1000)。现在DG闲着没事儿,他想知道能用这些砝码称出多少种不同的重量?

 

输入

第一行包含一个整数T,表示测试样例的数目
每组测试样例的输入6个整数:a1,a2,a3,a4,a5,a6
 

 

输出

对于每组测试样例,输出一个整数,表示能称出的不同重量的数目。

 

样例输入

1 1 1 0 0 0 0

样例输出

3

提示

 

 注意砝码只能放在一起

 

来源

校赛题

 

#include<iostream>
#include<algorithm>
#include<stdio.h>

using namespace std;

int t[]={1,2,3,5,10,20};


int main(void)
{
  int cases;
  cin >> cases;

  while(cases--)
  {
    int num[6];
    int ub = 0;
    for(int i=0;i<6;i++)
    {
      cin>>num[i];
      ub += t[i]*num[i];
    }
    bool flag[6][1001] = {false};
    for(int i = 0;i < 6;i++)
    for(int j = 1;j <= num[i];j++)
    {
      flag[i][j*t[i]] = true;
    }
    for(int i = 4;i >=0 ;i--)
    {
      for(int k = 1;k <= ub;k++)
      {
        if(flag[i+1][k])
        {
          for(int j = 0;j <= num[i];j++)
          {
            flag[i][k+j*t[i]] = true;
          }
        }
      }
    }
    int res = 0;
    for(int i = 1;i <= ub;i++)
      if(flag[0][i])
        res++;
    cout<<res<<endl;
  }
  return 0;
}

 

转载于:https://www.cnblogs.com/gorllen/archive/2013/05/03/3057894.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值