Four weights to produce integer scale differences from 0 through 40 pounds
APL 198 * 50% = 99
z←W n                                                  
l←⍉(n⍴3)⊤w←0,⍳+/b←3*0,⍳n-1                             
r←(⍴l)⍴0                                               
:while 0≠+/+/l&gt;1                                       
    r←r+l&gt;1                                                
    l←((l≤1)×l)+1⌽l&gt;1                                      
:end                                                   
a←' ',⌽⎕av[97+⍳n]                                      
c←(⍴l)⍴⍳n                                              
b←0,⌽b                                                 
z←l≠r                                                  
l←z×l                                                  
r←z×r                                                  
l←1+l×c                                                
r←1+r×c                                                
z←w,'{',a[l],'}','{',a[r],'}','{',b[l],'}','{',b[r],'}'

As we are effectively working in base three the arithmetic is fairly trivial and is complete by the end of the while loop where the arrays l and r are the contents of the left and right scale pans respectively in base three. This takes about 80 characters. The rest is formatting the output which I am sure can be improved.
To run simply type W followed by the number of weights you want to use. Below is a sample output for n=3:
 W 3
 0 {   }{   }{ 0 0 0 }{ 0 0 0 }
 1 {  a}{   }{ 0 0 1 }{ 0 0 0 }
 2 { b }{  a}{ 0 3 0 }{ 0 0 1 }
 3 { b }{   }{ 0 3 0 }{ 0 0 0 }
 4 { ba}{   }{ 0 3 1 }{ 0 0 0 }
 5 {c  }{ ba}{ 9 0 0 }{ 0 3 1 }
 6 {c  }{ b }{ 9 0 0 }{ 0 3 0 }
 7 {c a}{ b }{ 9 0 1 }{ 0 3 0 }
 8 {c  }{  a}{ 9 0 0 }{ 0 0 1 }
 9 {c  }{   }{ 9 0 0 }{ 0 0 0 }
10 {c a}{   }{ 9 0 1 }{ 0 0 0 }
11 {cb }{  a}{ 9 3 0 }{ 0 0 1 }
12 {cb }{   }{ 9 3 0 }{ 0 0 0 }
13 {cba}{   }{ 9 3 1 }{ 0 0 0 }