【luogu4141】【bzoj2287】 消失之物 [动规 背包]

P4141 消失之物 

看题我直接懵逼 然后想着先打一遍统计方案的dp 猛然发现我忘了....

灰溜溜打开学长的代码 哦!这样!其实我也可以

我们在转移的时候 是f[v]+=f[v-a[i]] 这样统计的体积为a[i]的贡献值 所以!.....(我咕了)

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<cmath>
#include<stack>
#include<algorithm>
using namespace std;
#define ll long long
#define rg register
#define lson o<<1
#define rson o<<1|1
const int N=2000+5,M=200000+5,inf=0x3f3f3f3f,P=19650827;
int n,m,a[N],f[N][N];
template <class t>void rd(t &x){
    x=0;int w=0;char ch=0;
    while(!isdigit(ch)) w|=ch=='-',ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    x=w?-x:x;
}

int main(){
    freopen("in.txt","r",stdin);
    rd(n),rd(m);
    f[0][0]=1;
    for(int i=1;i<=n;++i){
        rd(a[i]);
        f[0][i]=1;
        for(int v=m;v>=a[i];--v)
        f[v][0]=(f[v][0]+f[v-a[i]][0])%10;
    }
    for(int i=1;i<=n;++i){
        for(int v=1;v<=m;++v)
        if(v>=a[i]) f[v][i]=(f[v][0]-f[v-a[i]][i]+10)%10;
        else f[v][i]=f[v][0];
        for(int v=1;v<=m;++v) printf("%d",f[v][i]);
        printf("\n");
    }
    return 0;
}
 

 

posted @ 2019-07-11 19:08  委屈的咸鱼鱼鱼鱼  阅读(223)  评论(0编辑  收藏  举报