描述
XX中的食堂在使用饭卡之前使用饭票
饭票并不向饭卡一样方便。比如你有1张5元饭票和3张1元饭票,则你无法付4元的饭费。
某天小x去食堂吃饭,手里有n种饭票,面值分别为A1~An,数量分别为C1~Cn
请你计算小x的饭票能组成多少在[1,m]区间内的面值。
输入
第一行2个数n m,用空格隔开。
第二行前n个数,分别为A1…An
第二行后n个数,分别为C1…Cn
1 ≤ n ≤ 100
1 ≤ Ai ≤ m ≤ 100000
1 ≤ Ci ≤ 1000
输出
一个数,即问题的答案
样例
输入
3 10
1 2 4 2 1 1
输出
8
代码
//二进制分组
#include<bits/stdc++.h>
using namespace std;
int a[10001];
bool v[100001];
main()
{
int n,m,sum=0,ans=0;
cin>>m>>n;
int x[m+1],y[m+1];
for(int i=1;i<=m;i++)
scanf("%d",&y[i]);
for(int i=1;i<=m;i++)
scanf("%d",&x[i]);
for(int i=1;i<=m;i++)
{
int t=1;
while(x[i]>t)
//将每张钱有多少张即t进行二进制拆分,例如将9分成1,2,4,2
{
a[++sum]=t*y[i];
x[i]-=t;
t*=2;
}
a[++sum]=x[i]*y[i];
}
// for(int i=1;i<=sum;i++)
// cout<<a[i]<<endl;
v[0]=true;
for(int i=1;i<=sum;i++)/

该博客讲述了饭票在XX食堂的使用情况,讨论了如何计算特定面值饭票组合的总数,给定n种面值和数量的饭票,求解能组成1到m区间内所有可能面值的组合数量。样例输入和输出也已给出。
最低0.47元/天 解锁文章
1277

被折叠的 条评论
为什么被折叠?



