POJ 1276 Cash Machine 解题报告

POJ 1276 Cash Machine 解题报告

编号:1276

 

考查点:枚举、搜索

 

思路:这个是zz让我看得代码,看了别人的自然知道如何抄了..自己肯定想不到怎么能够不拉下任何一种cash情况.

 

提交情况:看了别人的代码,今天还在这道题上TLEN次,后来才发现是循环变量写错了..

 

Source Code


//POJ Grids 1276
#include <stdio.h>
#include 
<string.h>
#include 
<stdlib.h>

struct Bill{
    
int n;
    
int d;
};
Bill b[
11];
bool flag[100001];

int compare(const void* e1,const void* e2)
{
    Bill
* a = (Bill*)e1;
    Bill
* b = (Bill*)e2;
    
return b->- a->d;
}

int main()
{
    
int cash,n;
    
while (scanf("%d %d",&cash,&n)!=EOF)
    {
        
for (int i=0;i<n;i++)
        {
            scanf(
"%d %d",&b[i].n,&b[i].d);
        }
        
if (!cash||!n)
        {
            printf(
"0\n");
            
continue;
        }
        qsort(b,n,
sizeof(Bill),compare);
        memset(flag,
false,sizeof flag);
        flag[
0= true;
        
int max = 0;
        
for (int i=0;i<n;i++)
            
for (int j=max;j>=0;j--)
                
if (flag[j])
                    
for (int k=1;k<=b[i].n;k++)
                    {
                        
int temp = j + k*b[i].d;
                        
if (temp>cash)
                            
break;
                        max 
= temp>max ? temp : max;
                        
if (!flag[temp])
                            flag[temp] 
= true;
                    }

                    printf(
"%d\n",max);
    }

    
return 0;
}

总结:这道英文题不是书上的,自己目前肯定搞不定这么麻烦的问题,努力.

 

 

 

                                                       By   Ns517

                                                      Time 09.02.05

posted @ 2009-02-05 23:31  端木  阅读(824)  评论(0编辑  收藏  举报