砝码称重(dp)
来源:互联网 发布:tuigirl88最新域名 编辑:程序博客网 时间:2024/05/16 18:36
砝码称重
内容:
砝码称重(30分)
设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),
要求:
输入方式:a1 a2 a3 a4 a5 a6
(表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个)
输出方式:Total=N
(N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)
如输入:1_1_0_0_0_0 (注:下划线表示空格)
输出:TOTAL=3 表示可以称出1g,2g,3g三种不同的重量。
#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <map>#include <algorithm>#include <math.h>#include <vector>#include <cstring>#include <cstdio>using namespace std;bool dp[1005];int num[7],size[7],sum;int main(){ num[1]=1;//虽然数组从零开始,这里赋值应该从一开始因为下面dp数组dp[0]=1,而dp[k]|=dp[k-num[i]] num[2]=2; num[3]=3; num[4]=5; num[5]=10; num[6]=20; int i,j,k,ans; ans=sum=0; for(i=1;i<=6;i++){ scanf("%d",&size[i]); sum+=num[i]*size[i]; } memset(dp,0,sizeof(dp)); dp[0]=1; for(i=1;i<=6;i++) for(j=1;j<=size[i];j++) for(k=sum;k>=num[i];k--) dp[k]|=dp[k-num[i]]; for(i=sum;i>=1;i--){ if(dp[i]) ans++; } printf("Total=%d\n",ans); return 0;}
0 0
- 砝码称重(dp)
- 砝码称重问题【dp】
- ssl1072-砝码称重【dp练习】
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 水仙花数(2010)
- 多项式求和(2011)
- 数塔(2084)
- 青年歌手大奖赛(2014)
- 过河卒(dp算法)
- 砝码称重(dp)
- The kth great number
- 最大公约数和最小公倍数算法总结
- Daydream(2668)
- ubuntu 下安装vim
- 偶数求和(2015)
- 数据的交换输出(2016)
- 字符串统计(2017)
- A hard puzzle(1097)