Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
G++ 2612ms#include <cstdio> #include <cstring> using namespace std; int read() { int x=0,f=1;char c=getchar(); while (c<'0' || c>'9'){if (c=='-')f=-1;c=getchar();} while (c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-48;c=getchar();} return x*f; } template <typename T> void print(T x) { if (x<0)x=-x,putchar('-'); if (x>9)print(x/10); putchar(x%10+48); } template <typename T> void print(T x,char c) { print(x); putchar(c); } const int MAXN=101; const int MAXM=100010; int n,m; int a[MAXN],num[MAXN]; bool f[MAXM]; int main() { while (true) { n=read();m=read(); if (n==0&&m==0)break; for (int i=1;i<=m;i++)f[i]=false; for (int i=1;i<=n;i++)a[i]=read(); for (int i=1;i<=n;i++)num[i]=read(); int rest;f[0]=true; for (int i=1;i<=n;i++) { rest=num[i]; for (int k=1;rest-k>=0;rest-=k,k*=2) for (int j=m;j>=a[i]*k;j--) f[j]=f[j]|f[j-a[i]*k]; if (rest) { for (int j=m;j>=a[i]*rest;j--) f[j]=f[j]|f[j-a[i]*rest]; } } int ans=0; for (int i=1;i<=m;i++) if (f[i])ans++; print(ans,'\n'); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator