HDUOJ----2159 FATE
FATE
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6553 Accepted Submission(s): 3016
1 1
10 10 1 9
1 1
9 10 2 10
1 1
2 2
-1
1
改用一维费用背包求解./.
将背包设置为结构体来进行求解..
代码:oms
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int maxn=;
struct patience
{
int a,b;
};
patience sta[maxn];
struct guawu
{
int num; //数目
int val; //经验值
};
guawu dp[maxn];
int main()
{
int n,m,k,s,i,g;
while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF)
{
for(i=;i<k;i++)
scanf("%d%d",&sta[i].a,&sta[i].b);
memset(dp,,sizeof(dp));
for(i=;i<k;i++) /*种类*/
{
for(g=sta[i].b;g<=m;g++) /*忍耐度*/
{
if(dp[g].val<=dp[g-sta[i].b].val+sta[i].a)
{
if(dp[g].val<dp[g-sta[i].b].val+sta[i].a||(dp[g].val==dp[g-sta[i].b].val+sta[i].a&&dp[g].num>dp[g-sta[i].b].num+))
dp[g].num=dp[g-sta[i].b].num+; /*这里标记最大的容纳度*/
dp[g].val=dp[g-sta[i].b].val+sta[i].a;
}
}
}
int minc=;
int pos=m;
for(i=m;i>=;i--)
{
if(dp[i].val>=n&&minc>=dp[i].val)
{
minc=dp[i].val;
pos=i;
}
}
if(dp[pos].num>s||dp[pos].val<n)
printf("-1\n");
else
printf("%d\n",m-pos);
}
return ;
}
第二种方法.....二维费用包....
代码:31ms
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int maxn=;
struct master
{
int a; //获得的经验
int b; //忍耐度
};
master sta[maxn];
int dp[maxn][maxn];
int main()
{
int n,m,k,s;
int i,j,v;
while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF)
{
for(i=;i<k;i++)
scanf("%d%d",&sta[i].a,&sta[i].b);
memset(dp,,sizeof(dp));
for(i=;i<k;i++)
{
for(j=sta[i].b;j<=m;j++)
{
for(v=;v<=s;v++)
{
if(dp[j][v]<dp[j-sta[i].b][v-]+sta[i].a)
dp[j][v]=dp[j-sta[i].b][v-]+sta[i].a;
}
}
}
for(i=;i<=m;i++)
{
for(j=;j<=s;j++)
{
if(dp[i][j]>=n) goto loop;
}
}
loop:
printf("%d\n",m-i);
}
return ;
}
HDUOJ----2159 FATE的更多相关文章
- HDU 2159 FATE 完全背包
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2159 FATE Time Limit: 2000/1000 MS (Java/Others)Memo ...
- HDOJ(HDU).2159 FATE (DP 带个数限制的完全背包)
HDOJ(HDU).2159 FATE (DP 带个数限制的完全背包) 题意分析 与普通的完全背包大同小异,区别就在于多了一个个数限制,那么在普通的完全背包的基础上,增加一维,表示个数.同时for循环 ...
- HDU 2159 FATE(二维费用背包)
FATE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 2159 FATE (二维完全背包
FATE http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备 ...
- hdu 2159 FATE
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路:二维完全背包,状态转移方程为: f[j][l]=max(f[j][l],f[j-b[i]] ...
- HDU 2159 FATE(全然背包+二维费用背包)
FATE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 2159 FATE (完全背包+有限尚需时日)()双费背包
FATE Problem Description 近期xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd開始对杀怪产生的厌恶感,但又不得不通过杀怪来升 ...
- hdu 2159 FATE (二维完全背包)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路: dp[j][k] 代表消耗耐久度j,干掉k个敌人获得的经验值. 状态转移方程为: dp[j] ...
- hdu 2159 FATE (二维完全背包)
Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现 ...
- HDU 2159 FATE(有选择物品总个数限制的完全背包,经典!!)
FATE Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
随机推荐
- Java遍历Map键、值。获取Map大小的方法
Map读取键值对,Java遍历Map的两种实现方法 第一种方法是根据map的keyset()方法来获取key的set集合,然后遍历map取得value的值 import java.util.HashM ...
- android 利用 aapt 解析 apk 得到应用名称 包名 版本号 权限等信息
在上传各大市场时发现 apk 上传后能自动解析出应用名称.包名.版本号.使用权限等信息,所以就研究了一下 1 直接解压 apk 解析 AndroidManifest.xml 是不行的,因为 apk ...
- recyclerView 列表类控件卡顿优化
1.使用ConstraintLayout减少布局层级. 2.可以的话,设置RecyclerView布局等高,然后设置recyclerView.setHasFixedSize(true)这样可以避免每次 ...
- wifiphisher使用介绍
1.github地址:https://github.com/sophron/wifiphisher 2.需要安装在kali linux下面 3.需要两个无线网卡 4.安装方法是使用介绍,参考githu ...
- Paint、Canvas、Matrix使用解说(一、Paint)
username=tianjian4592">我正在參加 CSDN 2015博客之星评选 感恩分享活动,假设认为文章还不错,请投个票鼓舞下吧:http://vote.blog.csdn ...
- go语言基础之指针做函数参数
1.指针做函数参数 示例: package main //必须有个main包 import "fmt" func swap(a, b int) { a, b = b, a fmt. ...
- Oracle综合数据库管理命令集
sqlplus SANKYU/SANKYU@ORADB_192.168.25.235 cmd: exp .......(最后不要加;号)--sankyuexp SANKYU/SANKYU@SUNNY ...
- C#.NET常见问题(FAQ)-如何给Listbox添加右键菜单
1 拖一个ContextMenuStrip控件,然后可以直接在界面上编辑,也可以在FormLoad的时候动态添加 2 把这两个控件关联起来就可以实现listBox1的右键菜单跟ContextMen ...
- fcntl的区域锁定
文件中的某个部分被锁定了,但其他的程序可以访问这个文件的其他部分,称为文件段锁定或文件区域锁定.经常使用文件区域锁定是fcntl函数. #include <sys/types.h> #in ...
- Java从零开始学十(Arrays类对数组的常用方法)
一.Arrays类常用方法 二.简单例子 package com.pb.demo1; import java.util.Arrays; /* * Arrays工具类的中的几个常用方法 * 1.copy ...