杭电2159-二维费用的背包问题
2016-05-04 21:31
417 查看
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int n,m,k,s; int v[110],w[110]; int dp[110][110]; void TwoVictoryPack() { int i,j,x; for(i=1;i<=k;i++) //枚举怪物数 { for(j=1;j<=s;j++) //枚举杀怪数 { for(x=w[i];x<=m;x++) //枚举忍耐数 dp[x][j]=max(dp[x][j],dp[x-w[i]][j-1]+v[i]); } } } int main() { int i; while(~scanf("%d%d%d%d",&n,&m,&k,&s)) { for(i=1;i<=k;i++) scanf("%d%d",&v[i],&w[i]); memset(dp,0,sizeof(dp)); TwoVictoryPack(); if(dp[m][s]>=n) { for(i=0;i<=m;i++) { if(dp[i][s]>=n) { cout<<m-i<<endl; break; } } } else printf("-1\n"); } return 0; }
相关文章推荐
- Java回调机制(异步)
- 第六周项目二-带武器的游戏角色
- ExpandableListView
- 标准C++中的string类的用法总结
- 图像识别---opencv安装
- 点击后先缩小再放大的View
- 看蘑菇街发展历程全面解析
- Android产品式开发:
- 图论 邻接矩阵
- poj1743最长不重复公共子串
- JavaScript之单例实战
- Sum(hdu4407)
- RTT常用数据类型
- Android开发中重要的类
- C++模板
- Java在硬盘上创建一个文件并写入一些文字数据FileWriter
- 一个 while 实现 C 翻转单向链表
- Machine Learning -01 --Introduction 机器学习介绍
- [暴力] BZOJ 3917 [Baltic2014]sequence
- argmax()