USACO Section 3.1 Stamps - 表示很Eggache!!!看清题目才是根本..

本文介绍了一个基于多重背包思想的问题解决方案,重点在于如何合理分配空间大小,确保既能满足所需数字的最小化,又不会超出内存限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 题目很简单...就是多重背包的思想...保证每个空间尽量能凑出并且所需的数字最小...

问题就是!!!这个背包的大小...必须要注意阿~~2000000基本是要严格的...大一点爆空间...小一点错结果...我开始就是犯傻..开空间各种2...后来再看了下题目才过的...

Program:

/* ID: zzyzzy12 LANG: C++ TASK: stamps */ #include<iostream> #include<istream> #include<stdio.h> #include<string.h> #include<math.h> #include<stack> #include<algorithm> #include<queue> #define oo 2000000000 #define ll long long using namespace std; int k,n,x,i,w[2505050],num; int main() { freopen("stamps.in","r",stdin); freopen("stamps.out","w",stdout); memset(w,-1,sizeof(w)); w[0]=0; num=0; scanf("%d%d",&k,&n); while (n--) { scanf("%d",&x); for (i=0;i<=num;i++) if (w[i]>=0 && w[i]<=k && (w[i+x]==-1 || w[i]+1<w[i+x]) && i+x<=2000000) { w[i+x]=w[i]+1; if (i+x>num) num=i+x; } } for (i=1;i<=num;i++) if (w[i]==-1 || w[i]>k) break; printf("%d\n",i-1); return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值