Codeforces 453 B Little Pony and Harmony Chest(Round 259 div.1 B/div.2 D)
2014-08-05 01:50
615 查看
题目链接:http://codeforces.com/contest/454/problem/D
题目大意:给出一个数组a,要求另一个数组b,满足数组b中的所有元素互质,且∑|ai-bi|(i:0~n)最小
由于数组b中的数只能在1-60里面选,那么可以以1-60之中的质数排列S为状态,建立状态压缩模型;dp[i][j]表示前i个数在j状态时满足∑|ai-bi|(i:0~n)最小的值。
代码:
题目大意:给出一个数组a,要求另一个数组b,满足数组b中的所有元素互质,且∑|ai-bi|(i:0~n)最小
由于数组b中的数只能在1-60里面选,那么可以以1-60之中的质数排列S为状态,建立状态压缩模型;dp[i][j]表示前i个数在j状态时满足∑|ai-bi|(i:0~n)最小的值。
代码:
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #define N 59 const int INF=0x3f3f3f3f; using namespace std; int prime[17],si[61],dp[111][1<<17],mem[111][1<<17],vis ; int n,a[111],out[111],pre[111][1<<17]; int pn; void get_prime() { for(int i=2;i<N;i++) { if(vis[i]) continue; prime[pn++]=i; for(int j=i*i;j<60;j+=i) { vis[j]=1; } } } int tra(int a) { int ans=0; for(int i=0;i<pn;i++) { if(!(a%prime[i])) ans|=(1<<i); while(!(a%prime[i])) a/=prime[i]; } return ans; } int main() { get_prime(); // for(int i=0;i<pn;i++) // cout<<prime[i]<<' '; for(int i=1;i<N;i++) { si[i]=tra(i); //cout<<i<<":"<<si[i]<<endl; } scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } int maxn=(1<<pn); memset(dp,INF,sizeof(dp)); memset(dp[0],0,sizeof(dp[0])); for(int i=1;i<=n;i++) { for(int j=0;j<maxn;j++) { for(int k=0;k<=60;k++) { if(!(si[k] & j)) { int temp=dp[i-1][j]+abs(a[i]-k); if(dp[i][j|si[k]]>temp) { dp[i][j|si[k]]=temp; mem[i][j|si[k]]=k; pre[i][j|si[k]]=j; } } } } } int ma=INF,ansj; for(int i=0;i<maxn;i++) { if(ma>dp [i]) { ma=dp [i]; ansj=i; } } for(int i=n;i>=1;i--) { int tt=mem[i][ansj]; out[i]=tt; ansj=pre[i][ansj]; } for(int i=1;i<=n;i++) { printf("%d%c",out[i],i==n?'\n':' '); } return 0; }
相关文章推荐
- Codeforces Round #259 (Div. 2)-D. Little Pony and Harmony Chest
- Codeforces 453 B. Little Pony and Harmony Chest
- codeforces 453B B. Little Pony and Harmony Chest(dp+数论)
- 【CF】259 Div.1 B Little Pony and Harmony Chest
- Codeforces 453B B. Little Pony and Harmony Chest(dp+数论)
- CodeForces 453B Little Pony and Harmony Chest
- Codeforces Round #259 (Div. 2) D. Little Pony and Harmony Chest
- Codeforces Round #259 (Div. 2) A-Little Pony and Crystal Mine
- Codeforces Round #259 (Div. 1)——Little Pony and Harmony Chest
- Codeforces Round #259 (Div. 1) A. Little Pony and Expected Maximum 数学公式结论找规律水题
- Codeforces 4538 (状态压缩dp)Little Pony and Harmony Chest
- Codeforces Round #259 (Div. 2) C. Little Pony and Expected Maximum
- Codeforces Round #259 (Div. 2) A.Little Pony and Crystal Mine
- Codeforces Round #259 (Div. 2) E. Little Pony and Summer Sun Celebration
- Codeforces Round #259 (Div. 2) C Little Pony and Expected Maximum
- Codeforces Div. 2 #259-B. Little Pony and Sort by Shift
- Codeforces Round #259 (Div. 1) B. Little Pony and Harmony Chest(状压dp)
- Codeforces Round #259 (Div. 2) B. Little Pony and Sort by Shift(序列)
- Codeforces Round #259 (Div. 2) B - Little Pony and Sort by Shift
- Codeforces Round #259 (Div. 2) B. Little Pony and Sort by Shift