小明の魔法计划
来源:互联网 发布:pc摄像机软件 编辑:程序博客网 时间:2024/04/30 01:07
小明の魔法计划
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
在一个遥远的数学魔法国度,小明在学习一个魔法,这个魔法需要一些施法材料,所幸的是施法材料已经准备好了,下一步就是建立魔法阵了,每一个施法材料都有一个特性值,表示为一个大于1小于10 ^ 7的整数,当且仅当一个材料的特性值是另一个材料的特性值的倍数的时候,他们才可以建立法力连接。比如说,一个特性值为6和一个特性值为9的施法材料是不可以建立法力连接的,而一个特性值为9和一个特性值为18的材料是可以建立法力连接的,值得注意的是法力连接是双向的。一个稳定的魔法阵要求属于这个法阵的材料之间不存在任何两个不直接连接的施法材料,比如说由(1,3,9)组成的魔法阵是稳定的,而(3,6,9)组成的魔法阵是不稳定的,因为值为6和值为9的材料无法建立连接。一个魔法阵的威力定义为这个法阵需要的材料的个数。
现在小明已经收集到了一些材料,他想要知道在知道他收集的材料的特性值的前提下,能建立的最大威力的魔法阵的消耗材料的数量是多少。
Input
首先一个整数T,代表数据组数(T<=80)
对于每一组数据,第一行是一个整数n,代表小明收集的施法材料的数量(1 < = n < = 1000)
接下来一行一个有n个数,以空格隔开,分别代表n个施法材料的特性值,每个数1 < = a < = 10 ^ 7
具体见样例
Output
每组数据输出一行一个整数,代表最大威力的魔法阵的需要的材料的个数
Example Input
251 2 4 8 16812 24 1 2 4 8 72 16
Example Output
56
Hint
魔法阵不一定是矩阵,施法材料可以随意摆放。
类似于动规的水题,状态方程类似于最长上升子序列的算法
#include <bits/stdc++.h>using namespace std;int a[10006],dp[10006];//dp数组是存储每个元素的状态;int main(){ int t,n,m,i,j,mm; scanf("%d",&t); while(t--) { mm=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); dp[i]=0;//使每个元素的初始状态归为0; } sort(a,a+n); dp[0]=1;//第一个元素一定会进入,想是第一步变为1; for(i=0;i<n;i++) { m=0; for(j=0;j<i;j++) { if(a[i]%a[j]==0) { m=max(dp[j],m);//每一次遍历如果满足状态就会是其状态+1; } } dp[i]=m+1;//遍历完后更新dp的状态 mm=max(mm,dp[i]); } printf("%d\n",mm); }}
阅读全文
0 0
- 小明の魔法计划
- 小明の魔法计划
- sdut3488 小明の魔法计划
- SDUT 3488 小明の魔法计划
- 小明の魔法计划(最长倍数子序列)
- 小明の魔法计划——最长上升子序列
- scala小魔法
- 小明的魔法调度框架之旅
- 小明的存钱计划
- 小明的存钱计划
- 小明的存钱计划
- 小明的存钱计划
- 小明的存钱计划
- 小明的存钱计划
- 小明的喷漆计划
- 小明的喷漆计划
- 小明的存钱计划
- [BZOJ4731][UOJ267]魔法小程序
- This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory
- LeetCode 11. Container With Most Water (Python)
- 盒模型、3d变换、关键帧动画
- 4js函数
- 杭电1012求e
- 小明の魔法计划
- Linux 自带编辑器 vi
- java—模拟银行账户业务—类的带参方法
- 自己模拟一个简易的spring框架
- HDU 2222 AC自动机 模板
- 我的第一篇博客
- 各种同步方法性能比较(synchronized ReentrantLock Atomic)
- codeforces 7C Line 扩展欧几里德 Java
- 摄像头识别手写数字