题意为有m个向量,将任意个向量相加使得距离刚好为s,求向量的最小个数。

看题后的第一想法是用广搜+dp,后来提交代码却RE了(应该不会的)。后来用枚举试了一下,还是RE。所以才想到是不是数组开小了一点,于是将数组开大了一点,结果果然AC了。其实广搜+dp应该更快的,而且空间复杂度也较小。

广搜+dp:

#include <iostream>
#include <cstdio>
#include <string.h>
#include <cmath>
#include <queue>
using namespace std;struct node
{int x,y;
}vec[50];
int dp[310][310];
int m,s;
void bfs()
{node n0;n0.x =0; n0.y =0;dp[0][0]= 0;queue<node> que;que.push( n0);int flag= 0;while( !que.empty() ){node tem =que.front();que.pop();int xxx=tem.x*tem.x +tem.y* tem.y;if( xxx ==s*s){printf("%d\n", dp[tem.x][tem.y]);flag=1;break;}if( xxx>s*s ){continue;}int i;for( i=0; i<m; i++){node no;no.x =tem.x+ vec[i].x;no.y =tem.y+ vec[i].y; if(!dp[no.x][no.y] ||dp[tem.x][tem.y]+1< dp[no.x][no.y] ){dp[no.x][no.y] =dp[tem.x][tem.y]+1;que.push( no);}}}if( !flag)printf("not possible\n");
}
int main()
{int t;scanf("%d", &t);while( t--){scanf("%d%d", &m, &s);int i;for( i=0; i<m; i++)scanf("%d%d", &vec[i].x, &vec[i].y );memset( dp, 0, sizeof( dp));bfs();}return 0;
}

UVa 10306. e-Coins相关推荐

  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-Coin

    原题: At the Department for Bills and Coins, an extension of today's monetary system has newly been pr ...

  4. UVA - 10306 e-Coins

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

  5. uva 10306(完全背包)

    题意:有m种硬币和目标值s,如果能最少拿k个可以让拿出的硬币的x的和和y的和的平方和等于s的平方,输出k. 题解:完全背包问题,f[i][j]代表当硬币的x和y分别为i和j时最少共有多少个硬币组成,然 ...

  6. UVa 10306 - e-Coins

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

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

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

  8. uva 10306 e-coins【dp】

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

  9. uva 10306 简单DP

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

最新文章

  1. 《Git in Practice》作者访谈:关于Git的八个问题
  2. Newtonsoft.Json code
  3. 学校通知,本学期不用返校了
  4. 告诉你Hadoop是什么
  5. C语言编写带参数的宏编在三个数找最大数
  6. C语言小知识---printf()函数转换符的意义
  7. StakeDAO新增Sushiswap流动性奖励计划
  8. Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换
  9. Win10安装配置CLion+MinGW
  10. 13.2 处理静态资源【从零开始学Spring Boot】
  11. elasticsearch基础查询
  12. 持久层框架的比较Hibernate与 MyBatis
  13. 标准cpci接口定义_cpci接口定义精简
  14. Oracle 锁表查询及解锁
  15. C# 中的Finalize 和Dispose(bool disposing)和 Dispose()
  16. parallels desktop 网络初始化失败_升级Big Sur后Parallels虚拟机无法联网解决方法
  17. 如何入门多视角人脸正面化生成?不得不看的超详细最新综述!
  18. ABB 机械臂的部分代码
  19. 金大侠眼光果然犀利:《笑傲江湖》只值一块钱 (转)
  20. 机器学习吴恩达课程总结(五)

热门文章

  1. (论文翻译)AutoEncoder 聚类算法 - DEPICT
  2. jsptitle换行_fullcalendar中title内容过长显示不全的问题
  3. GPT-4王者加冕!读图做题性能炸天,凭自己就能考上斯坦福
  4. Apache原理详解
  5. python 函数与部分使用示例
  6. 天地图-第五篇-覆盖物
  7. python 怎么建立文件夹_如何用PYTHON新建文件夹
  8. shell判断大于、小于、等于
  9. 基于MATLAB的人民币识别系统
  10. 主成分分析(Principal Component Analysis)原理