poj 1742 Coins
// v给出N种硬币和个数,问可以取到1->M中的多少个值。
// 背包 完全背包 或多 重背包(二进制优化)都可以做
//
#include <iostream> #include <algorithm> #include <queue> #include <math.h> #include <stdio.h> #include <string.h> #include <vector> using namespace std; #define MOD 1000000007 #define maxn 100010 int dp[maxn],use[maxn]; int val[110],num[110]; int main(){ int n,m; dp[0]=1; while(scanf("%d %d",&n,&m),n|m){ int i,j,k; for(i=1;i<=n;i++) scanf("%d",&val[i]); for(i=1;i<=n;i++) scanf("%d",&num[i]); for(i=1;i<=m;i++) dp[i]=0; for(i=1;i<=n;i++){ for(j=0;j<=m;j++) use[j]=0; for(j=val[i];j<=m;j++) if(dp[j-val[i]]&&!dp[j]&&use[j-val[i]]+1<=num[i]){ dp[j]=1; use[j]=use[j-val[i]]+1;; } } int ans=0; for(i=1;i<=m;i++) if(dp[i]) ans++; printf("%d\n",ans); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步