| ||||||||||
| 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