CCF- CSP 202209-1如此编码 按部就班 满分题解
题目链接:202209-1如此编码
思路:
- 按照题目要求,定义数组
a[N],b[N],c[N];
- 初始化
c[0]=1
,边输入a
边初始化c
- 深入理解题意:需要根据
c
的值去凑一个整数m
,c[i]
的使用个数为b[i]
- 从大到小进行选择(倒序),每次尽可能选择较多个数,最多为
b[i]=m/c[i-1];
,然后更新m
,直到m
为0
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 30;
int n,m;
int a[N],b[N],c[N];//按照题目要求设置
int main()
{
cin>>n>>m;
c[0]=1;//初始化c[0]
for(int i=1;i<=n;i++)
{
cin>>a[i];
c[i]=c[i-1]*a[i];//根据定义求c[i]
}
for(int i=n;i>=1;i--)
{
b[i]=m/c[i-1];//b[i]为能选择的c[i-1]最大个数
m -= b[i]*c[i-1];
}
for(int i=1;i<=n;i++)
{
cout<<b[i]<<" ";
}
return 0;
}