传送门:牛客
题目描述:
题目较长此处省略
输入:
3 2
1 1 2
输出:
11
11
21
主要思路:
也就是说我们的dp数组存的是装满 j j j体积需要的方案数
下面是具体的代码部分:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define root 1,n,1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
inline ll read() {
ll x=0,w=1;char ch=getchar();
for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;
for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
return x*w;
}
#define maxn 1000000
#define ll_maxn 0x3f3f3f3f3f3f3f3f
const double eps=1e-8;
int n,m;int dp[maxn];
int ans[maxn];int a[maxn];
int main() {
n=read();m=read();
for(int i=1;i<=n;i++) a[i]=read();
dp[0]=1;
for(int i=1;i<=n;i++) {
for(int j=m;j>=a[i];j--) {
dp[j]=(dp[j]+dp[j-a[i]])%10;
}
}
ans[0]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) {
if(j<a[i]) ans[j]=dp[j];
else ans[j]=(dp[j]-ans[j-a[i]]+10)%10;
}
for(int j=1;j<=m;j++) printf("%d",ans[j]);
puts("");
}
return 0;
}