应该是基础的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的更多相关文章

  1. poj1722 SUBTRACT【线性DP】

    SUBTRACT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2037   Accepted: 901   Special ...

  2. 常规DP专题练习

    POJ2279 Mr. Young's Picture Permutations 题意 Language:Default Mr. Young's Picture Permutations Time L ...

  3. 题解 【POJ1722】 SUBTRACT

    先讲下题目意思 给定一个长度为\(n\)的序列\((1 \leq n \leq 100)\), 每次合并两个元素\(i,i+1\),即将\(i,i+1\)变为一个新的元素,权值为\(a[i]-a[i+ ...

  4. RDD常用方法之subtract&intersection&cartesian

    subtract Return an RDD with the elements from `this` that are not in `other` .     def subtract(othe ...

  5. [CareerCup] 7.4 Implement Multiply Subtract and Divide 实现乘法减法和除法

    7.4 Write methods to implement the multiply, subtract, and divide operations for integers. Use only ...

  6. POJ1722 动态规划

    POJ1722 问题重述: 给定一个数组a[1,2,..,n] .定义数组第i位上的减操作:把ai和ai+1换成ai - ai+1.输入一个n位数组以及目标整数t,求一个n-1次操作序列,使得最后剩下 ...

  7. add, subtract, multiply, divide

    加.减.乘.除:add, subtract, multiply, divide

  8. MongoDB比较两列大小 使用$subtract函数

    是找出整个表 a大于b的总数量,要怎么操作数据库呢,那就要用到$subtract函数 MongoDB比较两列大小 使用$subtract函数, // MongoDB 比较两列大小求出 啊>b 的 ...

  9. Spark 学习笔记之 union/intersection/subtract

    union/intersection/subtract: import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD im ...

随机推荐

  1. c#和c++互操作(平台调用相关)

    [DllImport("ScreenCaptureLib.dll", CallingConvention = CallingConvention.Cdecl)] public st ...

  2. CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中(转)

    http://www.jb51.net/article/58843.htm 一.安装Email发送程序 复制代码 代码如下: yum install sendmail mutt 二.安装FTP客户端程 ...

  3. selenium - xpath - 定位

    前言: XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. 看这里介绍:w3school 首先来看一下xpath常用的语法: 一.xpath ...

  4. windows下通过Git Bash使用Git常用命令

    Git跟SVN最大不同的地方就是分布式.SVN的集中式与Git的分布式决定各自的业务场景.既然是分布式的,那么大部分操作就是本地操作.一般Git操作都是通过IDE,比如Eclipse,如果装了Git ...

  5. css3动画学习笔记

    具体学习地址:http://www.imooc.com/learn/33CSS3中的三种动画:tranform形变动画/transition缓动动画/animation逐帧动画; tranform: ...

  6. windows环境下,安装zookeeper~

    1.   概述 ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.名字服务.分布式同步.组服务等.ZooKeeper的目标就是封装好复杂 ...

  7. linux lcd设备驱动剖析四

    在"linux lcd设备驱动剖析二"文章中,我们详细分析了s3c24xxfb_probe函数. 文章链接:http://blog.csdn.net/lwj103862095/ar ...

  8. 参数传递中编码问题(Get/Post 方式)(一)

    用JAVA在做一个支付接口时,需要和表现层的UTF8代码进行报文交换,因JAVA是GBK编码的,因此出现了小插曲.为此,花了点时间,重新梳理一下相关知识点. 以下内容是我转载的,觉得挺好的.... 一 ...

  9. Python多线程-生产者消费者模型

    用多线程和队列来实现生产者消费者模型 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import threading imp ...

  10. whoosh----索引|搜索文本类库

    先了解基本概念和步骤: Quick Start Whoosh是一个索引文本和搜索文本的类库,他可以为你提供搜索文本的服务,比如如果你在创建一个博客的软件,你可以用whoosh为它添加添加一个搜索功能以 ...