Fancy Mouse
- -|||

对于任何一个重量都存储一个状态变量,将0重量初始化为1,然后遍历所有砝码,碰到i是1,就将i+wj*k,k=1~nj都设置为1。最后遍历状态变量统计1的数量

#include<iostream>
using namespace std;

int main()
{
    
int status[20001],i,j,data,quantity,weight[20],number[20],max;
    cin
>>data;
    
while(data-- > 0)
    
{
        
for(i=0;i<20001;i++) status[i] = 0;
        cin
>>quantity;
        max 
= 0;
        status[
0= 1;
        
for(i=0;i<quantity;i++)
            cin
>>weight[i];
        
for(i=0;i<quantity;i++)
            cin
>>number[i];
        
while(quantity-- > 0)
        
{
            
for(i=max;i>=0;i--)
                
if(status[i])
                
{
                    
for(j=1;j<=number[quantity] && i+weight[quantity]*< 20001;j++)
                        status[i
+weight[quantity]*j] = 1;
                    
if(max < i+weight[quantity]*(--j))
                        max 
= i+weight[quantity]*j;
                }

        }

        
for(quantity=i=0;i<=max;i++)
            
if(status[i]) quantity++;
        cout
<<quantity<<endl;
    }

    
return 0;
}
posted on 2005-10-05 02:15  Fancy Mouse  阅读(293)  评论(1编辑  收藏  举报