poj 3590 The shuffle Problem——DP+置换
题目:http://poj.org/problem?id=3590
bzoj 1025 的弱化版。大概一样的 dp 。
输出方案的时候小的环靠前。不用担心 dp 时用 > 还是 >= 来转移,因为答案的那个 lcm 有唯一分解。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=;
int T,n,dp[M][N],dy[M][N],pri[M],cnt,sta[M],top,ans,sm;
bool vis[N];
int Mx(int a,int b){return a>b?a:b;}
void init()
{
for(int i=;i<=;i++)
{
if(!vis[i])pri[++cnt]=i;
for(int j=;j<=cnt&&i*pri[j]<=;j++)
{
vis[i*pri[j]]=;
if(i%pri[j]==)break;
}
}
}
void print()
{
printf("%d ",ans);
sort(sta+,sta+top+);
for(int i=;i<=n-sm;i++)printf("%d ",i);
for(int i=,cr=n-sm+;i<=top;i++)
{
for(int j=cr+,k=;k<sta[i];j++,k++)
printf("%d ",j);
printf("%d ",cr); cr+=sta[i];
}
puts("");
}
int main()
{
init();
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(dp,,sizeof dp); memset(dy,,sizeof dy);
dp[][]=; int i;
for(i=;i<=cnt&&pri[i]<=n;i++)
{
for(int j=;j<=n;j++)dp[i][j]=dp[i-][j];
for(int k=,p=pri[i];k<=&&p<=n;k++,p*=pri[i])//&&p<=n!! or exceed int
for(int j=p,d;j<=n;j++)
if((d=dp[i-][j-p]*p)>dp[i][j])//>? >=? no influence for 'only'
{
dp[i][j]=d; dy[i][j]=p;
}
}
i--; top=; ans=;
for(int j=;j<=n;j++)
if(dp[i][j]>ans)ans=dp[i][j],sm=j;
for(int t=i,cr=sm;t;t--)
{
if(!dy[t][cr])continue;
sta[++top]=dy[t][cr];
cr-=dy[t][cr];
}
print();
}
return ;
}
poj 3590 The shuffle Problem——DP+置换的更多相关文章
- POJ 3590 The shuffle Problem [置换群 DP]
传送门 $1A$太爽了 从此$Candy?$完全理解了这种$DP$做法 和bzoj1025类似,不过是求最大的公倍数,并输出一个字典序最小的方案 依旧枚举质因子和次数,不足的划分成1 输出方案从循环长 ...
- POJ 3590 The shuffle Problem
Any case of shuffling of n cards can be described with a permutation of 1 to n. Thus there are total ...
- poj 3590(dp 置换)
题目的意思是对于序列1,2,...,n.要你给出一种字典序最小的置换使得经过X次后变成最初状态,且要求最小的X最大. 通过理解置换的性质,问题可以等价于求x1,x2,..,xn 使得x1+x2+... ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- POJ - 1978 Hanafuda Shuffle
最初给牌编号时,编号的顺序是从下到上:洗牌时,认牌的顺序是从上到下.注意使用循环是尽量统一“i”的初始化值,都为“0”或者都为“1”,限界条件统一使用“<”或者“<=”. POJ - 19 ...
- UVA11069 - A Graph Problem(DP)
UVA11069 - A Graph Problem(DP) 题目链接 题目大意:给你n个点.要你找出有多少子串符合要求.首先没有连续的数字,其次不能再往里面加入不论什么的数字而不违反第一条要求. 解 ...
- poj 3311(状态压缩DP)
poj 3311(状态压缩DP) 题意:一个人送披萨从原点出发,每次不超过10个地方,每个地方可以重复走,给出这些地方之间的时间,求送完披萨回到原点的最小时间. 解析:类似TSP问题,但是每个点可以 ...
- poj 1185(状态压缩DP)
poj 1185(状态压缩DP) 题意:在一个N*M的矩阵中,‘H'表示不能放大炮,’P'表示可以放大炮,大炮能攻击到沿横向左右各两格,沿纵向上下各两格,现在要放尽可能多的大炮使得,大炮之间不能相互 ...
- poj 3254(状态压缩DP)
poj 3254(状态压缩DP) 题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相 ...
随机推荐
- 并发-Synchronized底层优化(偏向锁、轻量级锁)
Synchronized底层优化(偏向锁.轻量级锁) 参考: http://www.cnblogs.com/paddix/p/5405678.html 一.重量级锁 上篇文章中向大家介绍了Synchr ...
- Define class with itself as generic implementation. Why/how does this work?
https://stackoverflow.com/questions/10709061/define-class-with-itself-as-generic-implementation-why- ...
- EYES组——软件体系结构上机规划
EYES组——软件体系结构上机规划 考勤助手 第九周: 需求分析的详细撰写,并在此基础上探讨与完善,讨论软件的体系结构风格,画出初步的UML类图. 第十周: 选择合适的软件构架风格(3层C/S架构风格 ...
- 调用webservices中 枚举类型没有被序列化问题
引用服务后,代理类为自动为所有枚举类型生成了一个Bool类型相关字段,命名方式:比如枚举类名为“PayType”,生成的相关字段为“PayTypeSpecified”,此字段有何作用? PayType ...
- JQuery -- Dom操作, 示例代码
1.内部插入节点 * append(content) :向每个匹配的元素的内部的结尾处追加内容 * appendTo(content) :将每个匹配的元素追加到指定的元素中的内部结尾处 * ...
- gitlab库迁移
gitlab 迁移 gitlab上一共有两个分之,一级提交记录. git clone --bare http://111.222.333.xxx/jiqing/test.git 执行成功后,会多一个t ...
- 交换机上的trunk,hybrid,access配置和应用(转)
交换机上的trunk,hybrid,access配置和应用 以太网端口的链路类型: Access类型:端口只能属于一个vlan,一般用于连接计算机. Trunk类型:端口可以属于端个vlan,可以接收 ...
- ORACLE TO_CHAR,TO_DATE函数格式说明
YEAR,年份的英文全称 YYYY:四位表示的年份 YYY,YY,Y:年份的最后三位.两位或一位,缺省为当前世纪 MM:01~12的月份编号 MONTH:九个字符表示的月份,右边用空格填补 MON:三 ...
- Ubuntu的root用户问题
在Ubuntu中系统是默认禁止root用户登入操作,要使用超级用户可以加sudo 例: sudo chown book:book /work -R 或者切换到root su root passwor ...
- org.apache.jasper.JasperException: #{...} is not allowed in template
org.apache.jasper.JasperException: #{...} is not allowed in template 针对jsp页面使用JQueryUI元素,出现org.apa ...