题目: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+置换的更多相关文章

  1. POJ 3590 The shuffle Problem [置换群 DP]

    传送门 $1A$太爽了 从此$Candy?$完全理解了这种$DP$做法 和bzoj1025类似,不过是求最大的公倍数,并输出一个字典序最小的方案 依旧枚举质因子和次数,不足的划分成1 输出方案从循环长 ...

  2. 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 ...

  3. poj 3590(dp 置换)

    题目的意思是对于序列1,2,...,n.要你给出一种字典序最小的置换使得经过X次后变成最初状态,且要求最小的X最大. 通过理解置换的性质,问题可以等价于求x1,x2,..,xn 使得x1+x2+... ...

  4. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  5. POJ - 1978 Hanafuda Shuffle

    最初给牌编号时,编号的顺序是从下到上:洗牌时,认牌的顺序是从上到下.注意使用循环是尽量统一“i”的初始化值,都为“0”或者都为“1”,限界条件统一使用“<”或者“<=”. POJ - 19 ...

  6. UVA11069 - A Graph Problem(DP)

    UVA11069 - A Graph Problem(DP) 题目链接 题目大意:给你n个点.要你找出有多少子串符合要求.首先没有连续的数字,其次不能再往里面加入不论什么的数字而不违反第一条要求. 解 ...

  7. poj 3311(状态压缩DP)

    poj  3311(状态压缩DP) 题意:一个人送披萨从原点出发,每次不超过10个地方,每个地方可以重复走,给出这些地方之间的时间,求送完披萨回到原点的最小时间. 解析:类似TSP问题,但是每个点可以 ...

  8. poj 1185(状态压缩DP)

    poj  1185(状态压缩DP) 题意:在一个N*M的矩阵中,‘H'表示不能放大炮,’P'表示可以放大炮,大炮能攻击到沿横向左右各两格,沿纵向上下各两格,现在要放尽可能多的大炮使得,大炮之间不能相互 ...

  9. poj 3254(状态压缩DP)

    poj  3254(状态压缩DP) 题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相 ...

随机推荐

  1. 并发-Synchronized底层优化(偏向锁、轻量级锁)

    Synchronized底层优化(偏向锁.轻量级锁) 参考: http://www.cnblogs.com/paddix/p/5405678.html 一.重量级锁 上篇文章中向大家介绍了Synchr ...

  2. 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- ...

  3. EYES组——软件体系结构上机规划

    EYES组——软件体系结构上机规划 考勤助手 第九周: 需求分析的详细撰写,并在此基础上探讨与完善,讨论软件的体系结构风格,画出初步的UML类图. 第十周: 选择合适的软件构架风格(3层C/S架构风格 ...

  4. 调用webservices中 枚举类型没有被序列化问题

    引用服务后,代理类为自动为所有枚举类型生成了一个Bool类型相关字段,命名方式:比如枚举类名为“PayType”,生成的相关字段为“PayTypeSpecified”,此字段有何作用? PayType ...

  5. JQuery -- Dom操作, 示例代码

    1.内部插入节点 *   append(content) :向每个匹配的元素的内部的结尾处追加内容 *   appendTo(content) :将每个匹配的元素追加到指定的元素中的内部结尾处 *   ...

  6. gitlab库迁移

    gitlab 迁移 gitlab上一共有两个分之,一级提交记录. git clone --bare http://111.222.333.xxx/jiqing/test.git 执行成功后,会多一个t ...

  7. 交换机上的trunk,hybrid,access配置和应用(转)

    交换机上的trunk,hybrid,access配置和应用 以太网端口的链路类型: Access类型:端口只能属于一个vlan,一般用于连接计算机. Trunk类型:端口可以属于端个vlan,可以接收 ...

  8. ORACLE TO_CHAR,TO_DATE函数格式说明

    YEAR,年份的英文全称 YYYY:四位表示的年份 YYY,YY,Y:年份的最后三位.两位或一位,缺省为当前世纪 MM:01~12的月份编号 MONTH:九个字符表示的月份,右边用空格填补 MON:三 ...

  9. Ubuntu的root用户问题

    在Ubuntu中系统是默认禁止root用户登入操作,要使用超级用户可以加sudo 例: sudo chown book:book /work -R 或者切换到root su  root passwor ...

  10. org.apache.jasper.JasperException: #{...} is not allowed in template

    org.apache.jasper.JasperException: #{...} is not allowed in template   针对jsp页面使用JQueryUI元素,出现org.apa ...