HDU1755
2024-08-30 20:57:21
这道题直接暴力枚举复杂度为 n!*m
但是k<100 , 所以我们可以通过取模用dp[i][j] 表示k=i 时,-x取模k为j的最小值
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std; int vis[] , n , m , x , k , num[] , dp[][];
const int INF = ;
void dfs(int t , int state)
{
if(t >= n){
for(int i= ; i<=;i++)
if(dp[i][state%i] > state)
dp[i][state%i] = state;
return;
}
for(int i=;i<n;i++){
if(!vis[i]){
vis[i] = ;
dfs(t+ , state*+num[i]);
vis[i] = ;
}
}
} int main()
{
// freopen("a.in","rb",stdin);
//cout<<10*9*8*7*6*5*4*3*2*1<<endl;
while(scanf("%d%d",&n,&m) == ){
for(int i=;i<n;i++)
scanf("%d",num+i); memset(vis,,sizeof(vis)); for(int i=;i<=;i++)
for(int j=;j<=;j++) dp[i][j] = INF; for(int i=;i<n;i++){
if(num[i]){
vis[i] = ;
dfs(,num[i]);
vis[i] = ;
}
}
for(int i=;i<m;i++)
{
scanf("%d%d",&x,&k);
if(dp[k][(((-x)%k)+k)%k] < INF)
printf("%d\n",dp[k][(((-x)%k)+k)%k]); //state+x = b*k -> state%k = (-x)%k
else puts("None");
}
}
return ;
}
最新文章
- 微信小程序-视图视图引用
- Java的版本分类
- PHP内核研究(内存管理1)
- HttpClient4.5 SSL访问工具类
- DIV+CSS
- jq 文字上下不间断滚动实例
- Python成长笔记 - 基础篇 (四)函数
- 10GE---超长距离的万兆以太网
- HDU 4417 Super Mario(主席树求区间内的区间查询+离散化)
- Photoshop图层混合模式计算公式大全(转)
- poj1617---columnar encryption
- Ubuntu基本命令--apt, dpkg
- js原生之一个面向对象的应用
- Timer类的schedule和scheduleAtFixedRate 简单应用
- vs2017开发Node.js控制台程序
- 在非activity类调用startActivityForResult
- C#中的Cookie
- shell启动执行cypher语句
- Java 8 – Stream Collectors groupingBy count examples
- C++中memcpy和memmove
热门文章
- Retinex系列之McCann99 Retinex 分类: 图像处理 Matlab 2014-12-03 11:27 585人阅读 评论(0) 收藏
- C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]
- Statistics gathering and SQL Tuning Advisor
- 里氏替换原则中is和as分别的作用
- poj3662 Telephone Lines
- CF599B Spongebob and Joke
- Elasticsearch--集群&;时光之门和恢复控制
- 如何理解JavaScript的单线程
- 轻松搞定Spring+quartz的定时任务
- vultr服务器L2TP搭建