博客
关于我
【SSL】1072砝码称重
阅读量:324 次
发布时间:2019-03-04

本文共 763 字,大约阅读时间需要 2 分钟。

【SSL】1072砝码称重

Time Limit:1000MS
Memory Limit:65536K

Description

设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),
要求:
输入方式:a1 a2 a3 a4 a5 a6
(表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个)
输出方式:N
(N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)

Input

Output

Sample Input

1 1 0 0 0 0
(注:下划线表示空格)

Sample Output

3 表示可以称出1g,2g,3g三种不同的重量。

思路

这是一道。
把每一个砝码都做01背包。
设f[i]表示ig是否能被称出来。
f[i]=f[i]|f[i-a[j]],f[0]=1,1<=i<=1000,1<=j<=6
最后再扫一次。

代码

#include<iostream>#include<cstdio>#include<cstring> using namespace std;bool f[1010];int main(){   	int a[10]={   0,1,2,3,5,10,20},i,j,k,ans=0,t;	memset(f,0,sizeof(f));	f[0]=1;	for(i=1;i<=6;i++)	{   		scanf("%d",&t);		for(j=1;j<=t;j++)			for(k=1000;k>0;k--)				if (k>=a[i])					f[k]|=f[k-a[i]];//状态转移方程	}	for(i=1;i<=1000;i++)		ans+=f[i];	printf("%d",ans);	return 0;}

转载地址:http://avze.baihongyu.com/

你可能感兴趣的文章
C++ throw、try、catch、noexcept
查看>>
vim之vim滚屏与跳转
查看>>
C指针之函数指针与typedef
查看>>
CentOS8 字体大小调整
查看>>
Go 小数类型/浮点型的使用
查看>>
设计模式之组合模式
查看>>
设计模式之外观模式
查看>>
Linux 验证、数字证书、RPM包中文件的提取
查看>>
《Redis开发与运维》阅读笔记:键管理之单个键管理
查看>>
(HTML学习记录):列表标签
查看>>
(CMake):指定标准进行编译、CMake官方文档查看
查看>>
(恋上数据结构笔记):优先级队列(Priority Queue)
查看>>
(Python学习笔记):条件语句
查看>>
(Python学习笔记):字典
查看>>
(C++11/14/17学习笔记):并发基本概念及实现,进程、线程基本概念
查看>>
(C++11/14/17学习笔记):线程启动、结束,创建线程多法、join,detach
查看>>
(C++11/14/17学习笔记):创建多个线程、数据共享问题分析及案例
查看>>
(C++11/14/17学习笔记):future其他成员函数、shared_future、atomic
查看>>
(C++11/14/17学习笔记):std::atomic续、std::async与std::thread对比
查看>>
(QT学习笔记):按钮组中的常用控件
查看>>