POJ1742-Coins
http://poj.org/problem?id=1742
#include<stdio.h> #include<string.h> int dp[100010],C[110],A[110],vis[100010]; int main(void) { int n,m,i,j,ans; while(scanf("%d%d",&n,&m),n||m) { for(i=0;i<n;i++) scanf("%d",&A[i]); for(i=0;i<n;i++) scanf("%d",&C[i]); memset(dp,0,sizeof(dp)); dp[0]=1; ans=0; for(i=0;i<n;i++) { memset(vis,0,sizeof(vis)); for(j=A[i];j<=m;j++) if(!dp[j]&&dp[j-A[i]]&&vis[j-A[i]]<C[i]) { ans++; dp[j]=1; vis[j]=vis[j-A[i]]+1; } } printf("%d\n",ans); } return 0; }