poj1722 SUBTRACT
应该是基础的dp练手题
线性dp最主要的就是关于阶段的划分,这个题中我没想到的一点就是开状态的时候使用了前i个数能合成的数来记录
我自己的想法就是类似于区间dp这样的记录方法,这种方法确实开了很多冗余的状态而造成了整道题卡住……
题目中的添减号和括号,实际上可以转化为添加号,这样子最后输出的时候就可以通过把加号换成括号和减号来进行输出。还好spj。
Code:
#include <cstdio>
#include <cstring>
using namespace std; const int N = ;
const int T = ;
const int Trans = ; int n, t, a[N];
char dp[N][T], op[N]; int main() {
scanf("%d%d", &n, &t);
t += Trans;
for(int i = ; i <= n; i++)
scanf("%d", &a[i]); memset(dp, , sizeof(dp));
dp[][a[] - a[] + Trans] = '-';
for(int i = ; i < n; i++)
for(int j = ; j < (Trans << ); j++)
if(dp[i][j] != ) {
if(j + a[i + ] <= (Trans << )) dp[i + ][j + a[i + ]] = '+';
if(j - a[i + ] >= ) dp[i + ][j - a[i + ]] = '-';
} for(int i = n; i >= ; i--) {
op[i] = dp[i][t];
if(dp[i][t] == '+') t -= a[i];
else t += a[i];
} int cnt = ;
for(int i = ; i <= n; i++)
if(op[i] == '+') {
printf("%d\n", i - cnt - );
cnt++;
}
for(int i = ; i <= n; i++)
if(op[i] == '-') puts(""); return ;
}
poj1722 SUBTRACT的更多相关文章
- poj1722 SUBTRACT【线性DP】
SUBTRACT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2037 Accepted: 901 Special ...
- 常规DP专题练习
POJ2279 Mr. Young's Picture Permutations 题意 Language:Default Mr. Young's Picture Permutations Time L ...
- 题解 【POJ1722】 SUBTRACT
先讲下题目意思 给定一个长度为\(n\)的序列\((1 \leq n \leq 100)\), 每次合并两个元素\(i,i+1\),即将\(i,i+1\)变为一个新的元素,权值为\(a[i]-a[i+ ...
- RDD常用方法之subtract&intersection&cartesian
subtract Return an RDD with the elements from `this` that are not in `other` . def subtract(othe ...
- [CareerCup] 7.4 Implement Multiply Subtract and Divide 实现乘法减法和除法
7.4 Write methods to implement the multiply, subtract, and divide operations for integers. Use only ...
- POJ1722 动态规划
POJ1722 问题重述: 给定一个数组a[1,2,..,n] .定义数组第i位上的减操作:把ai和ai+1换成ai - ai+1.输入一个n位数组以及目标整数t,求一个n-1次操作序列,使得最后剩下 ...
- add, subtract, multiply, divide
加.减.乘.除:add, subtract, multiply, divide
- MongoDB比较两列大小 使用$subtract函数
是找出整个表 a大于b的总数量,要怎么操作数据库呢,那就要用到$subtract函数 MongoDB比较两列大小 使用$subtract函数, // MongoDB 比较两列大小求出 啊>b 的 ...
- Spark 学习笔记之 union/intersection/subtract
union/intersection/subtract: import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD im ...
随机推荐
- WCF 配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.S ...
- django的多对一,一对一,多对多关系
from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) a ...
- Java问题:中间件是什么
和朋友聊天时被问到中间件是什么?一时有点语赛,感觉熟悉这个概念,但又完全不知道如何清楚的向别人讲这些. 网络上搜了一下,也没找到让自己很认可的说法,有的说非业务的技术类组件,是操作系统之上和业务逻辑之 ...
- Eclipse 进入前选择Workspace
如果选择了默认的Workspace会有一个问题. 打开一个workspace的时候,再次打开eclipse会报错,提示当前workspace正在被使用,然后让选择workspace. 最好的方法是每次 ...
- 七、Jmeter + ant + jenkins轻量级接口自动化测试
七.Jmeter + ant + jenkins轻量级接口自动化测试 杀猪不用牛刀,工具没有牛逼高大尚之分,每个工具都有存在的理由:关键是看会不会用,怎么用,有没有用在合适的地方. 需要安装的工具: ...
- Linux修复磁盘操作
Linux修复磁盘操作 1.卸载分区 umount /data 修复磁盘,先判读是磁盘坏了,还是文件系统坏了:一般可以修复,但是建议换磁盘. 2.fsck -y /dev/sda1 ##-y 参数 ...
- MMU_段式映射
首先, 段式映射的示意图如下: 该例程有5个文件构成: head.s-------------入口程序 mmu.lds-----------连接文件 init.c---------------初始化文 ...
- eval是做什么的?
它的功能是把对应的字符串解析成js代码并运行, 应该避免使用eval,因为不安全,非常耗性能(2次,一次解析成js语句,一次执行) 注意:在项目里写js代码的时候,禁止使用的,因为有安全因素.
- Java中 单例(Singleton)的两种方式
第一种(饿汉式单例模式):在声明变量时实例化 public class Singleton { //静态初始化自动实例化 private static Singleton instance = new ...
- 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 3—多分类逻辑回归和神经网络
作业说明 Exercise 3,Week 4,使用Octave实现图片中手写数字 0-9 的识别,采用两种方式(1)多分类逻辑回归(2)多分类神经网络.对比结果. (1)多分类逻辑回归:实现 lrCo ...