Codeforces 703E
2016-12-08 10:59
309 查看
num[i][j],sum[i][j],前i个数合成k的第j的因子至少需要个数以及最小和
#include<iostream> #include<cstring> #include<cstdio> using namespace std; typedef __int64 LL; const LL INF=1e17; const int N=1000; LL aa ,cc ,bb[N+10000];int top; int num [N+10000];LL sum [N+10000];int pre [N+10000]; LL gcd(LL a,LL b){ if(!b)return a; return gcd(b,a%b); } int id(LL a){ return lower_bound(bb,bb+top,a)-bb; } int main(){ #ifdef DouBi freopen("in.cpp","r",stdin); #endif // DouBi int n;LL k; while(scanf("%d%I64d",&n,&k)!=EOF){ LL tk=k; for(int i=0;i<n;i++){ scanf("%I64d",&aa[i]); cc[i]=gcd(aa[i],k); tk/=gcd(tk,cc[i]); } if(tk!=1){ printf("-1\n");continue; } //printf("in1\n"); top=0; for(int j=1;j<=k/j;j++){ if(k%j==0)bb[top++]=j; } //printf("in2\n"); if(k/bb[top-1]!=bb[top-1]){ bb[top]=k/bb[top-1];top++; for(int i=top-3;i>=0;i--)bb[top++]=k/bb[i]; } else { for(int i=top-2;i>=0;i--)bb[top++]=k/bb[i]; } //printf("in3\n"); //for(int j=0;j<top;j++)printf("%I64d ",bb[j]);printf("bb\n"); for(int j=0;j<top;j++){ if(aa[0]%bb[j]==0)sum[0][j]=aa[0],num[0][j]=1,pre[0][j]=-1; else sum[0][j]=INF,num[0][j]=n+10,pre[0][j]=-1; } for(int i=1;i<n;i++){ for(int j=0;j<top;j++){ num[i][j]=num[i-1][j];sum[i][j]=sum[i-1][j];pre[i][j]=j; //dp[i][j]=min(dp[i-1][j],dp[i-1][bb[j]/gcd(bb[j],aa[i])]+1); int idx=id(bb[j]/gcd(bb[j],cc[i])); int x=num[i-1][idx]+1; LL y=sum[i-1][idx]+aa[i]; if(idx==0){ x=1; y=aa[i]; } if(x<num[i][j]||x==num[i][j]&&y<sum[i][j]){ num[i][j]=x;sum[i][j]=y; if(idx==0)idx=-1; pre[i][j]=idx; } if(sum[i][j]>INF)sum[i][j]=INF; } } printf("%d\n",num[n-1][top-1]); int j=top-1; for(int i=n-1;i>=0;i--){ if(j==-1)break; if(pre[i][j]!=j){ if(j==top-1)printf("%d",i+1); else printf(" %d",i+1); } j=pre[i][j]; } printf("\n"); } return 0; }
相关文章推荐
- 十五周项目1—哈希表及其运算实现
- zmq 中的事件
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- 蓝牙设计
- javascript正则表达式例子
- 第十五周项目一(7)归并排序
- 火车进站问题的求解——华为OJ高级难度题目
- 推荐React组件库
- 第十五周项目一(验证算法)
- springMVC 前台传递json格式数据到后台
- Linux下的tar压缩解压缩命令详解
- 电脑USB接口无反应问题解决
- test4直接收80端口
- 解析纯真QQIP库
- Codeforces Round #316 (Div. 2) D. Tree Requests dfs序
- App软件开发的10个常用技巧
- 遍历HashMap的四种方法
- 第十四周项目1-验证算法(3)
- intellij安装scala插件
- 第十四周项目7—是否二叉排序树