博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 10089 Repackaging 数学问题
阅读量:6223 次
发布时间:2019-06-21

本文共 820 字,大约阅读时间需要 2 分钟。

大致题意:给出几个包裹,每个包裹都包装好了3种大小的杯子。现在要重新包装,使向量

a[1]*(s[1][1],s[1][2],s[1][3])+a[2]*(s[2][1],s[2][2],s[2][3])+.....+a[n]*(s[n][1],s[n][2],s[n][3])=(k,k,k). 就这样转化成了向量问题其中a[i]为非负整数,k为正整数。

虽然转化成了向量问题,但是三维向量和这么多变量有点棘手,所以我们可以先降维,将原等式变化成:

a[1]*(s[1][2]-s[1][1],s[1][3]-s[1][1])+ a[2]*(s[2][2]- s[2][1],s[2][3]- s[2][1])+.....+a[n]*(s[n][2]- s[n][1],s[n][3]- s[n][1])=(0,0).

把二维向量看成以平面坐标系中以原点为起点的向量。如果只有两个向量,因为a[i]为非负数,所以只有两个向量的时候夹角必须为PI。n个向量的话,只要相邻两个向量的夹角不大于PI即可满足上述等式。代码不长,但是需要数学思维T_T

#include 
#include
#include
#include
using namespace std;const int maxn=1000+5;const double PI=acos(-1);int main(){ int n; double A[maxn]; while(scanf("%d",&n),n) { int s1,s2,s3; for(int i=0;i

 

转载于:https://www.cnblogs.com/pach/p/6052561.html

你可能感兴趣的文章
Panoramic 控件设计举例
查看>>
8.5 类的私有变量
查看>>
御未来安全之道 首届C3安全峰会举办
查看>>
pfSense添加子网的几种方式
查看>>
c#判断两个数的大小(2)
查看>>
bind安装过程
查看>>
组策略模板DIY
查看>>
基础编码管理组件 Example 程序
查看>>
安装边缘服务器-part01
查看>>
第十四章:监测和维护活动目录(一)(译自WindowsServer2008ActiveDirectoryResourceKit)
查看>>
Jackson序列化实例
查看>>
Flex入门
查看>>
docker常用的命令(持续更新)
查看>>
LoRa联盟主席:聚焦标准规范+产业生态,全球物联网事实标准初显
查看>>
继承性
查看>>
【ItemizedOverlay的ArrayIndexOutOfBoundsException/NullPointerException异常解决办法】
查看>>
ubuntu无法激活输入法,Zendstudio无法激活中文输入法问题
查看>>
linux下删除文件恢复方法
查看>>
Linux下如何识别IDER的软驱和光驱
查看>>
TreeView控件应用(包含递归调用)
查看>>