Xenia and Weights(Codeforces Round #197 (Div. 2)+DP)
题目链接
思路
\(dp[i][j][k]\)表示第\(i\)次操作放\(j\)后与另一堆的重量差为\(k\)是否存在。
代码实现如下
#include <set>
#include <map>
#include <deque>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <bitset>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
typedef pair<LL, LL> pLL;
typedef pair<LL, int> pLi;
typedef pair<int, LL> piL;;
typedef pair<int, int> pii;
typedef unsigned long long uLL;
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(x) x&(-x)
#define name2str(name) (#name)
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl
#define FIN freopen("in","r",stdin)
#define IO ios::sync_with_stdio(false),cin.tie(0)
const double eps = 1e-8;
const int mod = 1e9 + 7;
const int maxn = 1e5 + 7;
const double pi = acos(-1);
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3fLL;
int m, vis[15];
bool dp[1007][15][105];
char s[15];
vector<int> vec;
int main() {
scanf("%s%d", s, &m);
for(int i = 0; i < 10; ++i) {
if(s[i] == '1') vis[i+1] = 1;
}
for(int i = 1; i <= 10; ++i) {
if(vis[i]) dp[1][i][i] = 1;
}
for(int i = 2; i <= m; ++i) {
for(int j = 1; j <= 10; ++j) {
if(!vis[j]) continue;
for(int k = 1; k <= 10; ++k) {
if(!vis[k] || j == k) continue;
for(int t = 1; t <= k; ++t) {
if(!dp[i-1][k][t]) continue;
if(j >= t) dp[i][j][j-t] = 1;
}
}
}
}
int flag = 0;
for(int i = 1; i <= 10; ++i) {
for(int j = 1; j <= 10; ++j) {
if(dp[m][i][j]) {
flag = 1;
break;
}
}
if(flag) break;
}
if(!flag) puts("NO");
else {
puts("YES");
int num1 = 0, num2 = 0;
for(int i = 1; i <= 10; ++i) {
for(int j = 1; j <= 10; ++j) {
if(dp[m][i][j]) {
num1 = i, num2 = j;
break;
}
}
if(num1) break;
}
vec.push_back(num1);
for(int i = m - 1; i >= 1; --i) {
for(int j = 1; j <= 10; ++j) {
if(dp[i][j][num1-num2] && j != num1) {
vec.push_back(j);
num2 = num1 - num2;
num1 = j;
break;
}
}
}
for(int i = (int)vec.size() - 1; i >= 0; --i) {
printf("%d%c", vec[i], i == 0 ? '\n' : ' ');
}
}
return 0;
}
Xenia and Weights(Codeforces Round #197 (Div. 2)+DP)的更多相关文章
- 线段树 Codeforces Round #197 (Div. 2) D. Xenia and Bit Operations
题目传送门 /* 线段树的单点更新:有一个交叉更新,若rank=1,or:rank=0,xor 详细解释:http://www.xuebuyuan.com/1154895.html */ #inclu ...
- Codeforces Round #197 (Div. 2) (A、B、C、D、E五题合集)
A. Helpful Maths 题目大意 给一个连加计算式,只包含数字 1.2.3,要求重新排序,使得连加的数字从小到大 做法分析 把所有的数字记录下来,从小到大排序输出即可 参考代码 #inclu ...
- Codeforces Round #197 (Div. 2)
A.Helpful Maths 分析:将读入的字符转化为数字,直接排个序就可以了. #include <cstdlib> #include <cstring> #include ...
- Codeforces Round #197 (Div. 2) C,D两题
开了个小号做,C题一开始看错范围,D题看了半小时才看懂,居然也升到了div1,囧. C - Xenia and Weights 给出一串字符串,第i位如果是1的话,表示有重量为i的砝码,如果有该种砝码 ...
- Codeforces Round #197 (Div. 2) D. Xenia and Bit Operations
D. Xenia and Bit Operations time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Codeforces Round #197 (Div. 2) : E
看了codeforces上的大神写的题解之后,才知道这道题水的根本! 不过相对前面两题来说,这道题的思维要难一点: 不过想到了水的根本,这题也真心不难: 方法嘛,就像剥洋葱一样,从外面往里面剥: 所以 ...
- [置顶] Codeforces Round #197 (Div. 2)(完全)
http://codeforces.com/contest/339/ 这场正是水题大放送,在家晚上限制,赛后做了虚拟比赛 A,B 乱搞水题 C 我是贪心过的,枚举一下第一个拿的,然后选使差值最小的那个 ...
- Codeforces Round #197 (Div. 2) A. Helpful Maths【字符串/给一个连加计算式,只包含数字 1、2、3,要求重新排序,使得连加的数字从小到大】
A. Helpful Maths time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Codeforces Round #197 (Div. 2) : C
哎....这次的比赛被安叔骂的好惨! 不行呢,要虐回来: 这道搜索,老是写错,蛋疼啊! 果然是基础没打好! #include<cstdio> using namespace std; ], ...
随机推荐
- 如何科学的登陆GTA5
GTA5一款不存在游戏 又是一年促销,在舍友的诱惑下,终于下决心买了GTA5的线上模式,但是到游玩的时候却遇到了很多麻烦. 我总结了有三个问题: 1.笔记本或者低配电脑运行起来很卡,掉帧. 2.网络延 ...
- phpredis封装
<pre><?php/** * This is a Redis exntend class */ class RedisClient{ private static $instanc ...
- 在ensp上的OSPF
实验模拟 搭建实验拓扑 测试连通性 部署单区域OSPF网络 默认ospf 进程号为1 ,接着使用area命令创建区域并进入ospf区域视图 ,因为是单区域配置,所以使用骨干区域,即0区域 检查osp ...
- git删除本地分支,远端分支
br为远端分支名字. 删除local分支 git branch -d 分支名
- PHP表单select中有0选项的处理
<div class="layui-inline"> <label class="layui-form-label">是否锁定</ ...
- matlab循环中显示figure时窗口跳动
在Matlab中,当在一个循环内部利用figure显示图片时,有时候会出现窗口跳动,尤其是两个显示器的时候, 具体就是每次循环中显示的figure的位置都出现在屏幕的不同位置,导致看起来灰常不爽 go ...
- 打开iBatis显示运行sql语句
将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句,方便调试: log4j.logger.com.ibatis=DEBUG log4j.logger.com ...
- SQL Server中的GAM页和SGAM页
简介 我们已经知道SQL Server IO最小的单位是页,连续的8个页是一个区.SQL Server需要一种方式来知道其所管辖的数据库中的空间使用情况,这就是GAM页和SGAM页. Global A ...
- Java设计RestfulApi接口,实现统一格式返回
创建返回状态码枚举 package com.sunny.tool.api.enums; /** * @Author sunt * @Description 响应枚举状态码 * @Date 2019/1 ...
- C# IEnumerable接口
问: 集合很好用,而且非常简单,但是我不明白 为什么数组.ArrayList 和 Hasttable 这些集合都能用foreach直接遍历呢?我想自己定义一个集合类,应该怎么做呢? 回答:这个问题问的 ...