题意:有m种硬币和目标值s,如果能最少拿k个可以让拿出的硬币的x的和和y的和的平方和等于s的平方,输出k。

题解:完全背包问题,f[i][j]代表当硬币的x和y分别为i和j时最少共有多少个硬币组成,然后遍历一遍f数组选出满足条件的即i^2+j^2=s^2时最小是多少。

#include <stdio.h>
#include <string.h>
const int N = 305;
const int INF = 0x3f3f3f3f;
struct Coin {int x, y;
}c[N];
int f[N][N], t, m, s, res;void dp() {for (int i = 0; i <= s; i++) {for (int j = 0; j <= s; j++) {for (int k = 1; k <= m; k++) {if (i - c[k].x < 0 || j - c[k].y < 0)continue;if (f[i][j] > f[i - c[k].x][j - c[k].y] + 1)f[i][j] = f[i - c[k].x][j - c[k].y] + 1;}}}res = INF;for (int i = 0; i <= s; i++)for (int j = 0; j <= s; j++)if (i * i + j * j == s * s)if (res > f[i][j])res = f[i][j];
}int main() {scanf("%d", &t);while (t--) {memset(f, INF, sizeof(f));f[0][0] = 0;scanf("%d%d", &m, &s);for (int i = 1; i <= m; i++)scanf("%d%d", &c[i].x, &c[i].y);dp();if (res < INF)printf("%d\n", res);elseprintf("not possible\n");}return 0;
}

uva 10306(完全背包)相关推荐

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

    UVA 10306 e-Coins(全然背包: 二维限制条件) http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Item ...

  2. UVA 10306 e-Coins (二维背包)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  3. UVA 10306 e-Coins(二维完全背包)

    题意:e-coin有两个价值x,y,现在给你一个价值n,给你几种e-coin,问你能否用最小的e-coin数得到所求的价值n*n=(x1+x2+...xn)^2+(y1+y2+...yn)^2. 思路 ...

  4. UVA 10306 e-Coins(二维完全背包)

    题意: 有n种物品,每种物品有两种价值x和y,并且每种物品的个数不限,求(x1 + x2 + -)^2 + (y1 + y2 + -) ^2 == S ^ 2 思路: 因为每种物品任意个,所以是二维完 ...

  5. UVa 10306 - e-Coins

    题目:有m个钱币,有两种价值(xi,yi),现在要求组成面值sum(x)^2+sum(y)^2=s^2的最少硬币数. 分析:dp,二维安全背包.和以为背包相同,只是容量现在是二维的,按递增序枚举两个容 ...

  6. uva 10306 e-coins【dp】

    二维完全背包 #include <bits/stdc++.h> #define cl(a) memset(a,0,sizeof(a)) #define rep(i,a,b) for(int ...

  7. UVA - 10306 e-Coins

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

  8. UVa 10306. e-Coins

    题意为有m个向量,将任意个向量相加使得距离刚好为s,求向量的最小个数. 看题后的第一想法是用广搜+dp,后来提交代码却RE了(应该不会的).后来用枚举试了一下,还是RE.所以才想到是不是数组开小了一点 ...

  9. uva 10306 简单DP

    题意: 给n种硬币和一个面值s. 每种硬币有两种价值,并且有无限个,求能满足第一种价值i * i + j * j = s * s的最少硬币数. 解析: 先dp出每种情况下i,j用的最少银币,然后暴力搞 ...

最新文章

  1. git 设置有效目录_如何有效使用Git
  2. Nginx http和反向代理配置实例介绍
  3. pandas把多个列相加求和、输出字母a-z
  4. mysql5.6.24配置日志_windows下mysql5.6.x的日志正确配置方法(my.ini) (网上的都是5.6之前的版本)...
  5. VTK:图表之BreadthFirstDistance
  6. 网友质疑特斯拉电动汽车电池不利于回收 马斯克回怼!
  7. 大数据之-Hadoop伪分布式_配置文件说明---大数据之hadoop工作笔记0029
  8. 小程序文章怎么导出来_宠物小程序怎么进行盈利
  9. C#语言中循环分类总结
  10. android 好看的输入法,Android 手机上最好的输入法是哪种
  11. Centos7安装maven过程
  12. Android内核开发:浅析APK的安装过程
  13. FPGA实现任意分频 为所欲为——教你什么才是真正的任意分频
  14. 如何在ADS使用VerilogA模型,并扫描参数
  15. CS5532 C51驱动程序
  16. VTK:绘制圆锥体(附完整源码)
  17. Linux:安装ruby
  18. 腾讯企业邮箱设置与企业微信绑定
  19. 深入浅出理解视频编解码技术
  20. mysql中联合索引abc 使用bac_mysql 联合索引

热门文章

  1. barcode--php生成条形码
  2. Mac OSX的开机启动配置
  3. PDF中的图片如何提取出来?分享两种提取方法
  4. android.265g.com.,小米3s流产?小米3下一代机型为小米x4?
  5. android imageview 锯齿,[置顶] android 自定义圆角ImageView以及锯齿的处理
  6. 华为认证HCIA的方向选择
  7. apache的基本使用
  8. maven私有仓库的搭建——nexus的安装
  9. go-pitaya学习笔记(9)-rate_limiting demo分析
  10. linux - 安装Ubuntu20.04.5版本