博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sgu 160 Magic Multiplying Machine
阅读量:5098 次
发布时间:2019-06-13

本文共 1155 字,大约阅读时间需要 3 分钟。

给出n,m。从n个数中选几个相乘,再%m。能取到的最大值和取法。

用dp[i][j]记录前i行能否取到j这个结果。那么dp[i][j]至少等于dp[i-1][j],还能等于所有的dp[i-1][j]*arr[i]%m。要输出方案,那么如果在记录的过程中,j*arr[i]%m在i-1没出现说明是新得出的,且一定取了i号,那么p[j*arr[i]%m]=j。输出结果时往上回溯。

//#pragma comment(linker,"/STACK:1024000000,1024000000") #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long lon;const lon SZ=10010,INF=0x7FFFFFFF;const double EPS=1e-8;int arr[SZ],p[SZ];bool vst[SZ][1010];int main(){ //std::ios::sync_with_stdio(0); //freopen("d:\\1.txt","r",stdin); //for(;scanf("%d",&n)!=EOF;) lon casenum; //cin>>casenum; //for(lon time=1;time<=casenum;++time) { int n,m; cin>>n>>m; for(int i=1;i<=n;++i)cin>>arr[i]; vst[0][1]=1; for(int i=1;i<=n;++i) { copy(vst[i-1],vst[i-1]+m,vst[i]); for(int j=0;j
=0;--i) { if(vst[n][i]) { pos=i; break; } } if(pos==1)cout<
<
res; int cur=pos; cout<
<
=1;--i) { if(vst[i][cur]^vst[i-1][cur]) { res.push_back(i); cur=p[cur]; } } sort(res.begin(),res.end()); for(int i=0;i

 

转载于:https://www.cnblogs.com/gaudar/p/9784214.html

你可能感兴趣的文章
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
python第九天课程:遇到了金角大王
查看>>
字符串处理
查看>>
ECharts(Enterprise Charts 商业产品图表库)初识
查看>>
LeetCode Factorial Trailing Zeroes (阶乘后缀零)
查看>>
hdu 5402 Travelling Salesman Problem (技巧,未写完)
查看>>
[AIR] 获取U盘,打开U盘
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
asp.net 获取IP地理位置的几个主要接口
查看>>
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>
距离公式汇总以及Python实现
查看>>
设计模式之装饰者模式
查看>>