dp转图论——cf1070A好题
dp的状态转移很像一张有向图:每个状态为一个点,每中转移方案是一条有向边
本题要求是求出最小的数,那我们用状态[i,j]表示模i,数位和为j,那么从每个点出发的十条有向边代表[0,9]十个数
从每个状态点进行bfs,由于队首的点必定是当前最小的(因为bfs的顺序),所以可以保证最后求出的是最小的数
/*
dp[i][j]表示余数为i,和为j的状态是否被访问到
用pre[i,j,k]表示状态[i,j]是从k转移得到的
等效于一张有d*s个结点的图,要从(0,0)走到(0,s) ,要走最靠左边的路 */
#include<bits/stdc++.h>
#include<queue>
using namespace std;
int d,s,dp[][];
struct Node{
int x,y,z;
Node(){}
Node(int x,int y,int z):x(x),y(y),z(z){}
}pre[][]; void print(int t1,int t2){
if(t1 || t2){
print(pre[t1][t2].x,pre[t1][t2].y);
cout<<pre[t1][t2].z;
}
} queue<pair<int,int> >q; int main(){
cin>>d>>s; q.push(make_pair(,));
dp[][]=;
while(!q.empty()){
pair<int,int>p=q.front();q.pop();
for(int i=;i<=;i++){
int t1=(p.first*+i)%d;
int t2=(p.second+i);
if(dp[t1][t2])continue;
if(t2>s)break;
q.push(make_pair(t1,t2));
dp[t1][t2]=;
pre[t1][t2]=Node(p.first,p.second,i);
}
} if(dp[][s]==){
puts("-1");
return ;
} else {
print(,s);
}
}
dp转图论——cf1070A好题的更多相关文章
- dp优化-四边形不等式(模板题:合并石子)
学习博客:https://blog.csdn.net/noiau/article/details/72514812 看了好久,这里整理一下证明 方程形式:dp(i,j)=min(dp(i,k)+dp( ...
- nyoj 546——Divideing Jewels——————【dp、多重背包板子题】
Divideing Jewels 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Mary and Rose own a collection of jewells. ...
- HihoCoder#1279 : Rikka with Sequence(dp 枚举子集 二进制 神仙题)
题意 题目链接 Sol 不愧是dls出的比赛啊,265个交了题的人只有8个有分Orz 做完这题,,感觉自己的位运算dp姿势升华了... 首先最裸的dp应该比较好想,设\(f[i][j][k]\)表示前 ...
- 恶补一下DP+背包专题(刷刷水题)L2
开心的金明 题目大意 就是求一定背包容量的最大值 思路 想必大家都知道,一看到这种题目,就会想起01背包 虽然特别简单但是还是讲一下吧 状态设置 由于这题差不多是一个01背包的版子题,那么我们就只需要 ...
- zoj 3822 Domination 概率dp 2014牡丹江站D题
Domination Time Limit: 8 Seconds Memory Limit: 131072 KB Special Judge Edward is the headm ...
- 【JavaScript】【dp】Leetcode每日一题-解码方法
[JavaScript]Leetcode每日一题-解码方法 [题目描述] 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1 'B' -> 2 ... 'Z' -& ...
- DP 优化方法大杂烩 & 做题记录 I.
标 * 的是推荐阅读的部分 / 做的题目. 1. 动态 DP(DDP)算法简介 动态动态规划. 以 P4719 为例讲一讲 ddp: 1.1. 树剖解法 如果没有修改操作,那么可以设计出 DP 方案 ...
- 【DP系列学习一】简单题:kickstart2017 B.vote
https://code.google.com/codejam/contest/6304486/dashboard#s=p1 这是一道简单的dp,dp[i][j]代表A的voter为i,B的voter ...
- 【dp专题】NOIP真题-DP专题练习
这里学习一下DP的正确姿势. 也为了ZJOI2019去水一下做一些准备 题解就随便写写啦. 后续还是会有专题练习和综合练习的. P1005 矩阵取数游戏 给出$n \times m$矩阵每次在每一行取 ...
随机推荐
- 搭建WordPress博客程序库
搭建WordPress博客程序库 wordpress简介 wordpress是一套利用PHP语言和Mysql数据库开发的开源免费的Blog(博客,网站)程序,用户可以在支持PHP环境和Mysql数据库 ...
- CR0 - CR4 ,5个寄存器,留念,每次都要翻手册,太费事了
- Arrays 001
1.1 Array Initalization First of all, we need know Java arrays is static. When the array is initiali ...
- yum 安装pip
centos7 没有python-pip包就执行命令 yum -y install epel-release 执行成功之后,再次执行yum install python-pip 对安装好的pip进行升 ...
- 【JZOJ6409】困难的图论
description 给定由 n 个点 m 条边组成的无向连通图,保证没有重边和自环. 你需要找出所有边,满足这些边恰好存在于一个简单环中.一个环被称为简单环,当且仅当它包含的所有点都只在这个环中被 ...
- BZOJ 3083: 遥远的国度 (树剖+线段树)
传送门 解题思路 前两个操作都比较基础.对于第三个操作分类讨论一下,首先如果当前根不是要操作点的子树,那么就无影响,直接查询操作点的子树即可.第二种是当前根是操作点的子树,那就找到当前根到操作点这条链 ...
- NX二次开发-UFUN按类选择对话框UF_UI_select_with_class_dialog
#include <uf.h> #include <uf_ui.h> UF_initialize(); //按类选择对话框 char sCue[] = "按类选择对话 ...
- [Nowcoder] 数数字
题意:...咕咕懒得写了. 思路: 裸的记搜... #include <bits/stdc++.h> using namespace std; #define ll long long m ...
- opencv-图像形态学之开运算、闭运算、形态学梯度、顶帽、黑帽合辑
转自:https://blog.csdn.net/poem_qianmo/article/details/24599073 1.1 开运算(Opening Operation) 开运算(Opening ...
- jvm-多线程
多线程的目的 为什么要使用多线程?可以简单的分两个方面来说: 在多个cpu核心下,多线程的好处是显而易见的,不然多个cpu核心只跑一个线程其他的核心就都浪费了: 即便不考虑多核心,在单核下,多线程也是 ...