uva 10465 (完全背包)
2016-04-01 10:48
316 查看
【题意】有两种食物(数量无限)是Simpson喜欢的,每种食物都需要一个进食时间,现在他有时间t,
问能最多吃多少个食物,时间尽量用完,用不完求最小浪费时间情况下的最多能吃的实物数量。
【解题思路】完全背包,除了0之外其他初始化为负无穷大,不断贪心取正值即可。(根据贪心的思想,当前的最优解必定由上一个最优解转移而来,可以用个for循环枚举物品个数,这里由于只有2个,因此直接1个1个枚举也可以,这里才用后者!)
【AC代码】
#include <stdio.h>
using namespace std;
const int maxn = 10010;
const int inf = 100001;
int dp[maxn];
int main()
{
int m,n,t;
while(~scanf("%d%d%d",&m,&n,&t))
{
for(int i=1; i<=t; i++)dp[i]=-inf;
dp[0]=0;
for(int i=m; i<=t; i++)
{
if(dp[i]<dp[i-m]+1)
{
dp[i] = dp[i-m]+1;
}
}
for(int i=n; i<=t; i++)
{
if(dp[i]<dp[i-n]+1)
{
dp[i]=dp[i-n]+1;
}
}
int tmp=t;
while(dp[tmp]<0)tmp--;
if(t==tmp)
{
printf("%d\n",dp[tmp]);
}
else
{
printf("%d %d\n",dp[tmp],t-tmp);
}
}
return 0;
}
问能最多吃多少个食物,时间尽量用完,用不完求最小浪费时间情况下的最多能吃的实物数量。
【解题思路】完全背包,除了0之外其他初始化为负无穷大,不断贪心取正值即可。(根据贪心的思想,当前的最优解必定由上一个最优解转移而来,可以用个for循环枚举物品个数,这里由于只有2个,因此直接1个1个枚举也可以,这里才用后者!)
【AC代码】
#include <stdio.h>
using namespace std;
const int maxn = 10010;
const int inf = 100001;
int dp[maxn];
int main()
{
int m,n,t;
while(~scanf("%d%d%d",&m,&n,&t))
{
for(int i=1; i<=t; i++)dp[i]=-inf;
dp[0]=0;
for(int i=m; i<=t; i++)
{
if(dp[i]<dp[i-m]+1)
{
dp[i] = dp[i-m]+1;
}
}
for(int i=n; i<=t; i++)
{
if(dp[i]<dp[i-n]+1)
{
dp[i]=dp[i-n]+1;
}
}
int tmp=t;
while(dp[tmp]<0)tmp--;
if(t==tmp)
{
printf("%d\n",dp[tmp]);
}
else
{
printf("%d %d\n",dp[tmp],t-tmp);
}
}
return 0;
}
相关文章推荐
- Codeforces 659D Bicycle Race 【判定点是否在多边形内部】
- 采购组织0001不对工厂1000负责
- Codeforces 659C Tanya and Toys 【水题】
- 服务器安装字体库解决出现xx问题
- 汇编笔记整理
- 码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清
- 【hihocoder】机会渺茫
- cocos2dx 防御式编程模式
- CF--Dima and Salad
- 如何实现viewpager自动轮播
- 购物商城shopping连载(9)
- MATLAB Support Package for Arduino Hardware 安装当中的一些问题
- [疯狂Java]SQL:DDL语句(定义、修改表结构)
- 最简单的UDP程序
- Swift 初识
- JS判断对象是不是数组“Array”
- 还有没有道德的底线
- RValue forward sample code
- 字符串作业2
- python语言学习2——安装python