我希望你是我独家记忆

一段永远封存的记忆,随风而去
posts - 263, comments - 31, trackbacks - 0, articles - 3
   :: 首页 :: 新随笔 ::  :: 聚合  :: 管理

HLOJ_1008(DP)

Posted on 2009-03-14 19:13 Hero 阅读(93) 评论(0)  编辑 收藏 引用 所属分类: 代码如诗--ACM

 

 1 //1008  Accepted  265 660 878 C++  
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <string.h>
 5 
 6 int oo = 10000000 ;
 7 const int size = 150000 ;
 8 int dp[size] ;
 9 
10 int inn, inm ;
11 
12 int fmin( int a, int b )
13 {
14     return a < b ? a : b ;
15 }
16 
17 int main()
18 {
19     while( scanf( "%d"&inn ) != EOF )
20     {
21         int val[20], num[20] ; int total = 0 ;
22         forint i=1; i<=inn; i++ )
23             scanf( "%d %d"&val[i], &num[i] ) ;
24         scanf( "%d"&inm ) ;
25 
26         forint i=0; i<=20100; i++ ) dp[i] = oo ;
27         dp[0= 0 ;
28 
29         forint i=1; i<=inn; i++ )
30         {
31             total += val[i] * num[i] ;
32             int limit = fmin( inm, total ) ;
33             forint k=1; k<=num[i]; k++ )
34             {
35                 forint j=0; j<=limit; j++ )
36                 {
37                     if( j-val[i] >= 0 )
38                         dp[j] = fmin( dp[j], dp[j-val[i]]+1 ) ;
39                     else
40                         dp[j] = dp[j] ;
41                 }
42             }
43         }
44 
45         if( dp[inm] != oo ) printf( "%d\n", dp[inm] ) ;
46         else printf( "-1\n" ) ;
47     }
48     return 0 ;
49 }

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理