poj1276
来源:互联网 发布:淘宝名字大全男生 编辑:程序博客网 时间:2024/05/16 00:49
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
int cash;
bool a[100010];
while (cin>>cash)
{
memset(a,0,sizeof(a));
int n;
cin>>n;
a[0]=1;
int max=0;
for (int i=1;i<=n;i++)
{
int num,v;
cin>>num>>v;
for (int j=max;j>=0;j--) //逆序,保证使用的值是上一层的值,否则会被修改,
//若用二维数组则没问题
{
if (a[j])
{
for (int k=1;k<=num;k++)
if (j+k*v<=cash)
{
a[j+k*v]=1;
if (j+k*v>max) max=j+k*v;
}
}
}
}
cout<<max<<endl;
}
return 0;
}
/*题意:给出一个价值cash,然后给出n,代表n种面值,接着n对代表面值个数与面值,
要求最接近cash,但不超过cash的价值
思路:多重背包,dp数组记录现在的总和是否用过了,然后一直记录最大*/
#include <stdio.h>
#include <cstring>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
int cash;
bool a[100010];
while (cin>>cash)
{
memset(a,0,sizeof(a));
int n;
cin>>n;
a[0]=1;
int max=0;
for (int i=1;i<=n;i++)
{
int num,v;
cin>>num>>v;
for (int j=max;j>=0;j--) //逆序,保证使用的值是上一层的值,否则会被修改,
//若用二维数组则没问题
{
if (a[j])
{
for (int k=1;k<=num;k++)
if (j+k*v<=cash)
{
a[j+k*v]=1;
if (j+k*v>max) max=j+k*v;
}
}
}
}
cout<<max<<endl;
}
return 0;
}
/*题意:给出一个价值cash,然后给出n,代表n种面值,接着n对代表面值个数与面值,
要求最接近cash,但不超过cash的价值
思路:多重背包,dp数组记录现在的总和是否用过了,然后一直记录最大*/
0 0
- Poj1276
- poj1276
- poj1276
- poj1276
- poj1276
- poj1276
- poj1276
- poj1276
- poj1276
- poj1276
- poj1276
- poj1276
- poj1276
- poj1276
- POJ1276
- POJ1276
- poj1276
- poj1276
- 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理解决方案 服务器配置错误
- 编译脚本
- nyoj 32 组合数(DFS)
- SNMP协议详解
- CSS 实现表格中文字不换行,超长部分显示省略号
- poj1276
- javascript的for...in中的闭包陷阱
- SPOJ Query on a tree
- Joda Time使用
- Centos6.5安装mysql5.6数据库
- struts2和springmvc中使用logback
- 多益网络2015校园招聘面试题目大揭秘
- 返回参数二进制为1的个数
- 背包之01背包、完全背包、多重背包详解