正文

Zju 1366 Cash Machine2006-08-04 23:05:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/cruxd/17259.html

分享到:

1999291 2006-08-04 22:51:44 Accepted 1366 C++ 00:01.23 1176K St.Crux 终于又ac了一题.....最近几天我被淹没在绿色的wrong answer里。 『这个题很经典』hysbz的admin如是说。但我还是用不那么经典的办法.....用了两个数组,一个存标志位一个存数据。那个排序可有可无。 #include <cstdio>#include <string> int a[100001], b[100001], c, n, mx;int ni[10], di[10]; int main(){ //freopen("in.txt", "r", stdin); while(scanf("%d", &c) != EOF) {  int i, k, j;  scanf("%d", &n);  for(i = 0; i < n; i ++)  {   scanf("%d %d", &ni[i], &di[i]);  }  for(i = 0; i < n - 1; i ++)  {   int j = i, t0 = di[i], t1 = ni[i];   for(k = i + 1; k < n; k ++)   {    if(t0 > di[k])     {     j = k; t0 = di[k];    }   }   di[j] = di[i]; di[i] = t0; ni[i] = ni[j]; ni[j] = t1;  }  //pt();  mx = 0;  memset(a, 0, sizeof(a));  b[0] = 0;  int pi = 1, ti; // index for b[]....vector.  for(i = 0; i < n; i ++)  {   ti = pi;   for(j = 0; j < pi; j ++)   {    for(k = 0; k <= ni[i]; k ++)    {     int t = b[j] + di[i] * k;     if(t <= c)      {      if(a[t]) continue;      a[t] = 1;      b[ti ++] = t;      if(t == c)       goto out;     }    }   }   pi = ti;  }out:  for(i = c; i >= 0; i --)  {   if(a[i])   {    mx = i;    break;   }  }  printf("%d\n", mx); } return 0;}    

阅读(4781) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册