记录编号 587566 评测结果 A
题目名称 [POJ 1742]硬币 最终得分 100
用户昵称 Gravatar增强型图元文件 是否通过 通过
代码语言 C++ 运行时间 0.302 s
提交时间 2024-04-09 11:18:33 内存使用 5.83 MiB
显示代码纯文本
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN=110;
  4. int n,m;
  5. int a[MAXN],c[MAXN];
  6. bool f[100100];
  7. int main(int argc, char** argv) {
  8. freopen("makecoins.in","r",stdin);
  9. freopen("makecoins.out","w",stdout);
  10. cin>>n>>m;
  11. while(n&&m){
  12. memset(a,0,sizeof(a));
  13. memset(c,0,sizeof(c));
  14. memset(f,0,sizeof(f));
  15. for(int i=1;i<=n;i++){
  16. cin>>a[i];
  17. }
  18. for(int i=1;i<=n;i++){
  19. cin>>c[i];
  20. }
  21. f[0]=1;
  22. for(int i=1;i<=n;i++){
  23. int tm=0,tx=1,tp=1;
  24. while(tx<c[i]){
  25. for(int j=m;j>=tp*a[i];j--){
  26. f[j]|=f[j-tp*a[i]];
  27. }
  28. tm++;
  29. tp*=2;
  30. tx+=tp;
  31. }
  32. tx-=tp;
  33. tm--;
  34. int r=c[i]-tx;
  35. for(int j=m;j>=r*a[i];j--){
  36. f[j]|=f[j-r*a[i]];
  37. }
  38. }
  39. int ans=0;
  40. for(int i=1;i<=m;i++){
  41. if(f[i])ans++;
  42. }
  43. cout<<ans<<endl;
  44. cin>>n>>m;
  45. }
  46. return 0;
  47. }