题目:http://poj.org/problem?id=1276

 

背包问题。

看指定的货币能组合成哪些情况。钱最多且<=cash的即是答案。

 

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int a[11],type[11],m[100001];

int main()
{
   int money,num,i,j,k;
   
       while(~scanf("%d%d",&money,&num))
       {
          for(i =0 ; i < num ; ++i)
          {
                scanf("%d%d",&a[i],&type[i]);                                 
                m[type[i]] = 1;
          }
          
          memset(m,0,sizeof(m));
          m[0] = 1;
          
          for(i = 0 ; i < num ; ++i)//几种货币 
          {
              for(j = money ; j >= 0 ; --j)      
              if(m[j])
              {
                  for(k = 1; k <= a[i]; ++k)
                  {
                      if(j + k*type[i] > money) break;
                      m[j+k*type[i]] = 1; //可以得到 j+k*type[i] 
                  } 
              }      
          } 
                                       
          for(i = money ; i >= 0 ; --i)
          if(m[i])
          {                    
            printf("%d\n",i);               
            break;
          } 
       }
       
  // system("pause");
   return 0; 
}

 

相关文章:

  • 2022-12-23
  • 2021-12-03
  • 2021-10-31
  • 2021-06-10
  • 2021-10-15
  • 2021-09-18
  • 2021-10-07
猜你喜欢
  • 2022-12-23
  • 2021-07-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案