Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
百题留念!!!水过100。哈哈。这道题得感谢一位同仁的博客啊我是看了这位同仁的博客之后AC的。http://duanple.blog.163.com/blog/static/709717672008101985128651/。 贴下本人的代码: #include <stdio.h> #include <string.h> int cash,n; int pay[11],num[11],flag[100001],used[100001][11]; int main(int argc, char *argv[]) { int i,j,k,p,q,m,max; while(scanf("%d",&cash)!=EOF) { memset(flag,0,sizeof(flag)); memset(used,0,sizeof(used)); flag[0]=1; scanf("%d",&n); k=0; for(i=0;i<n;i++) scanf("%d%d",&num[i],&pay[i]); flag[0]=1; for(i=0;i<n;i++) { for(k=cash;k>=0;k--) { if(!flag[k]) continue; for(j=0;j<=num[i];j++) { p=j*pay[i]; if(k+p>cash) break; if(flag[k+p] && used[k+p][i] <j) break; flag[k+p]=1; used[k+p][i]=j; } } } for(i=cash;i>=0;i--) if(flag[i]) break; printf("%d\n",i); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator