USACO stamps
2015-12-27 16:52
232 查看
这道题的意思是给你K中邮票, 每种邮票有无数个, 你可以从中选取一些邮票, 但是所选取的邮票总数不能超过N个, 问用K种邮票能组成连续几个面值?完全背包的变体, 直接定义f[i][j]为前i种邮票组成j最少需要多少张,剩下的就看代码:
/* ID: m1500293 LANG: C++ PROG: stamps */ #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int stamps[55]; short f[2][2000000+2]; int main() { freopen("stamps.in", "r", stdin); freopen("stamps.out", "w", stdout); int K, N; scanf("%d%d", &K, &N); int maxstamps = 0; for(int i=1; i<=N; i++) { scanf("%d", &stamps[i]); maxstamps = max(maxstamps, stamps[i]); } memset(f, 0x3f, sizeof(f)); f[0][0] = 0; for(int i=1; i<=N; i++) { memset(f[i%2], 0x3f, sizeof(f[0])); for(int j=0; j<=maxstamps*K; j++) { if(j >= stamps[i]) f[i%2][j] = min(f[(i-1)%2][j], (short)(f[i%2][j-stamps[i]]+1)); else f[i%2][j] = f[(i-1)%2][j]; } } int res = 0; for(int j=1; j<=maxstamps*K; j++) { if(f[N%2][j] <= K) res = j; else break; } printf("%d\n", res); return 0; }
相关文章推荐
- jQuery实现全选、全不选、反选
- block循环引用问题
- OC下retain copy nomatic等属性的解析
- 学习Python编程的11个资源
- Android 报错:Error: Apostrophe not preceded by \ (in ... ...)
- Handler,MessageQueue,Runnable与Looper
- Uber明年在中国将继续补贴,并大举进军100个城市!
- C语言如何 实现 下雪效果
- 老男孩教育26期学员参观Speedy Cloud云计算
- iOS开发之数据的写入与读取(plist存储)
- C++11简化线程池的实现
- 使用python实现HMM
- memcached企业工作场景
- javascript MVC框架之 AngularJS 1.x 实用指南
- [LeetCode] Single Number
- adt-bundle更新eclipse,以及搭建android环境
- 总结
- [hdu 2544] 最短路
- JFinal+FullCallender.js开发终极排班管理系统
- 关于『65535问题』的一点研究与思考