USACO 2008 Dec Silver 1.Hay For Sale

来源:互联网 发布:知远战略研究所招聘 编辑:程序博客网 时间:2024/05/16 11:08

一打眼就是背包嘛。原始程序是这样的。

#include<stdio.h>#include<algorithm>using namespace std;int n,m;int f[55000];int main(){    scanf("%d %d",&n,&m);    f[0]=1;    for(int i=1;i<=m;i++)    {        int x;        scanf("%d",&x);        for(int j=n;j>=x;j--)        {            f[j]=max(f[j-x],f[j]);        }    }    for(int i=n;i>=0;i--)    {        if(f[i]!=0)        {            printf("%d",i);            return 0;        }    }}
但会发现超时。。。于是就优化一下喽,将出现过的体积数放在一个数组里。

#include<stdio.h>#include<algorithm>using namespace std;int n,m;int cnt;int que[5500];int vis[55000];int cmp(int a,int b){return a>b;}int main(){scanf("%d %d",&n,&m);que[1]=0;cnt=1;vis[0]=1;for(int i=1;i<=m;i++){int x;scanf("%d",&x);if(x>n)continue;int t=0;for(int j=1;j<=cnt;j++){if(vis[que[j]+x]==0&&que[j]+x<=n){t++;que[cnt+t]=que[j]+x;vis[que[j]+x]=1;}}cnt+=t;}sort(que+1,que+1+cnt,cmp);printf("%d",que[1]);}

然后呢?就过了。

0 0
原创粉丝点击