UVA 10306 e-Coins(全然背包: 二维限制条件)

option=com_onlinejudge&Itemid=8&page=show_problem&problem=1247">http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1247

题意:

对于每一个例子。先给定两个数n,m,分别表示有n种硬币,对于每一种硬币有两个价值。分别记做x,y,题目要求从中选择一些硬币,使得满足m*m=X*X+Y*Y, 当中X是选出的硬币的全部x价值的和。Y是全部选出的硬币的y价值的和。硬币有无数多个。如今要求的是,满足上述要求使用的最少的硬币数

分析:

硬币数量无限,这就是显然的全然背包问题. 做这类问题首先要搞清楚什么是限制条件, 什么是目标条件?

本题的限制条件是:  x价值与y价值.(它们值共同构成了限制值m)

本题的目标条件是: 使得所选硬币最少.

一般的全然背包状态设计都是用 dp[i][j]==x 表示当决策完前i个物品后, 限制条件正好==j时(或者不超过j时), 能得到的目标条件最优(可能要求最小或最大).

本来我是想用m作为j这维度的限制条件的,可是发现假设用m作为一维限制条件,那么你无法依据当前的m值和你当前选的物品来推出你上一次决策前的m’值. 所以本题须要用x和y两维限制条件来做. (事实上就是加了个维度,没什么本质的变化)

状态设计: dp[k][i][j]==num 表示决策完前k种硬币后, 当前全部硬币的x价值和为i , 当前全部硬币的y价值和为j 时所须要的最少硬币数目为num.(由x价值和与
y价值和我们确定唯一的 m )

状态转移:

dp[k][i][j] = min( dp[k-1][i][j] , dp[k][i-x[k]][j-y[k]])

怎样理解上述的状态转移方程呢?

首先来看dp[k][i][j], 它表示用前k中硬币构成 x价值和为i , y价值和为j 的方法数目. 那么:

1. 假设我们根本不用第k种硬币(仅仅用前k-1种硬币就可以),我们能够知道有dp[k-1][i][j]种方式能够(不用不论什么一个第k种硬币)构成x价值和为i , y价值和为j 的状态.

2. 假设我们至少用1个第k种硬币来构成目标状态, 那么我们能够知道有dp[k][i-x[k]][j-y[k]] 种方法能达成目的.

综上所述, dp[k][i][j] = min( dp[k-1][i][j] ,dp[k][i-x[k]][j-y[k]] )

初值为dp[0][0][0]=0 , 其它为INF(无穷大).

终于我们所求为 全部的dp[n][i][j]中满足 i*i+j*j==m*m 的最小值.

程序实现用的滚动数组, 所以dp仅仅有[i][j]这两个维度.

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define INF 1e8
const int maxn=300+5; int n,m;//n为货币种数,m为须要达到的价值
int x[maxn],y[maxn];//相应每种货币的两个属性值
int dp[maxn][maxn]; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
//读输入+初始化
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++)
dp[i][j]=INF;
dp[0][0]=0; //递推求解
int ans=INF;
for(int k=1;k<=n;k++)
for(int i=x[k];i<maxn;i++)
for(int j=y[k];j<maxn;j++)
{
dp[i][j] = min(dp[i][j], dp[i-x[k]][j-y[k]]+1);
if(i*i+j*j==m*m) //这里假设加了 k==n 就WA 想想为什么? ans=min(ans, dp[i][j]);
} //输出
if(ans==INF) printf("not possible\n");
else printf("%d\n",ans); }
return 0;
}

UVA 10306 e-Coins(全然背包: 二维限制条件)的更多相关文章

  1. UVA 10465 Homer Simpson(全然背包: 二维目标条件)

    UVA 10465 Homer Simpson(全然背包: 二维目标条件) http://uva.onlinejudge.org/index.php? option=com_onlinejudge&a ...

  2. HDU 2159 FATE(全然背包+二维费用背包)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. uva 10306 - e-Coins(完全背包)

    题目链接:10306 - e-Coins 题目大意:给出m和s, 再给出m种电子硬币,每种硬币有两种金额xi,yi.现在要在m种硬币种选若干个硬币,可以重复选同一种硬币, 使得(x1 + x2 + . ...

  4. UVA 562 Dividing coins --01背包的变形

    01背包的变形. 先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值. 代码: #include <iostre ...

  5. UVA 562 Dividing coins (01背包)

    //平分硬币问题 //对sum/2进行01背包,sum-2*dp[sum/2] #include <iostream> #include <cstring> #include ...

  6. HDU 2159 FATE(二维全然背包)

    中文题目就不用解释了   就是裸的二维全然背包 d[i][j]表示消耗i忍耐杀j个怪最多可获得的经验  然后就用全然背包来做了  二维背包背包只是是多了一重循环 <span style=&quo ...

  7. HDU2159 二维完全背包

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. DP:Cow Exhibition(POJ 2184)(二维问题转01背包)

        牛的展览会 题目大意:Bessie要选一些牛参加展览,这些牛有两个属性,funness和smartness,现在要你求出怎么选,可以使所有牛的smartness和funness的最大,并且这两 ...

  9. hdu3496 二维01背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3496 //刚看题目以为是简单的二维01背包,but,,有WA点.. 思路:题中说,只能买M ...

随机推荐

  1. 洛谷P1164 小A点菜 && caioj 1410 动态规划1:点菜(背包方案问题)

    方程很简单 f[0] = 1 f[j] += f[j-w[i]] #include<cstdio> #define REP(i, a, b) for(int i = (a); i < ...

  2. 题解 P2910 【[USACO08OPEN]寻宝之路Clear And Present Danger】

    说起来这还是本蒟蒻学完Floyd之后做的第一道题. emm...这是一道裸题,题目大致是说有一堆岛,岛之间有海盗,因此每一条边都有一个危险指数(权重),然后给出一段必须经过的路线,求从一号小岛走到N号 ...

  3. 一、 Hbase特性 3v特性,Volume(量级) Varity(种类) Velocity(速度)

    HBase中表的特点 大: 一个表可以由百亿行,上百万列(列多时,插入变慢) 面向列:面向列(族)的存储和权限控制,列(族)独立检索 稀疏:对于为空(null) 的列,并不占用存储空间,因此表可以设计 ...

  4. c++开源爬虫-Larbin简单介绍

    原文地址:http://leihuang.net/2014/06/16/Larbin-Introduction/ 由于近期学校实训.做的是一个搜索相关的项目,而且是c++的一个项目.所以就想到了lar ...

  5. Hive Cilent数据操作

    Hive运行命令方式有cli,jdbc.hwi.beeline.而我们经常使用的往往是cli shell 操作. cli shell hive -help hive --help 注:命令脚本必须在集 ...

  6. 用motion实现家庭视频监控

    需求?当然不是为了艳照.你们这些猥琐的人类! 毕竟家里总会有没人的时候,出门走到半路忘记煤气灶是不是关了,还得回去看看. 在这个科技以人为本的时代,当然应该是拿出智能手机联网看看啦.还有万一有人闯空门 ...

  7. 将IP表存入SQL里的程序

    将IP表存入SQL里的程序 写得比較粗糙,另一点错误,只是能达到效果.请大家測试  create.asp  ---------------------------------------------- ...

  8. 罗列几个Android插件化开发框架

    携程插件化框架 ACDD插件化框架 360插件化框架 Android-Plugin-Framework DL APK动态加载框架 部分框架对比 DynamicLoadApk 迁移成本很重:需要使用『t ...

  9. spring security oauth2 架构---官方

    原文地址:https://projects.spring.io/spring-security-oauth/docs/oauth2.html Introduction This is the user ...

  10. BZOJ3569: DZY Loves Chinese II(线性基构造)

    Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生.   今Dzy有一魞歄图, ...