POJ 1722 SUBTRACT 背包
来源:互联网 发布:java web项目规范 编辑:程序博客网 时间:2024/06/07 07:15
时空隧道
题目大意:
有一个数列a[1]……a[n],每次可以对这个数列进行一次操作,操作为用a[i]-a[i+1]这一项替代a[i]和a[i+1]这两项,要求进行n-1次操作之后这个数列只剩下一个数字a[1]=目标数字,输出操作顺序
分析:
其实转换一下就会发现其实就是在每个数字前面添加‘+’or‘-’
这不就是背包么….
然后输出略有些懵…看了看题解才发现自己脑残了…其实对于每个+号处理完之后,剩下的减号就一直从前往后合并就好了…
代码如下:
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>//by NeighThornusing namespace std;const int maxn=100+5,maxm=10000+5;int n,a[maxn],t,f[maxn][maxm*2],pre[maxn][maxm*2],sign[maxn],cnt;signed main(void){ scanf("%d%d",&n,&t),t+=10000; for(int i=1;i<=n;i++) scanf("%d",&a[i]); memset(f,0,sizeof(f)); f[1][a[1]+10000]=2; f[2][a[1]-a[2]+10000]=1; for(int i=3;i<=n;i++) for(int j=0;j<=20000;j++) if(f[i-1][j]){ if(j+a[i]<=20000) f[i][j+a[i]]=2; if(j-a[i]>=0) f[i][j-a[i]]=1; } for(int i=n;i>=1;i--){ if(f[i][t]==2) sign[i]=1,t-=a[i]; else sign[i]=0,t+=a[i]; } int tmp=0; for(int i=2;i<=n;i++) if(sign[i]==1) cout<<i-1-tmp++<<endl; for(int i=2;i<=n;i++) if(sign[i]==0) cout<<1<<endl; return 0;}
by >_< NeighThorn
1 0
- POJ 1722 SUBTRACT 背包
- poj 1722 SUBTRACT
- POJ 1722 SUBTRACT
- POJ 1722 SUBTRACT
- poj - 1722 - SUBTRACT(dp)
- POJ 1722 SUBTRACT(DP)
- poj 1722 SUBTRACT(经典dp)
- POJ 背包
- poj1722 SUBTRACT
- poj1722 SUBTRACT
- F - Subtract
- poj1722 SUBTRACT
- cv::subtract
- tf.subtract()
- POJ 1742 多重背包
- poj 1276 多重背包..
- 【多重背包】POJ 1014
- 【多重背包】POJ 2392
- 第九章:菱形
- 从0开始学习Git系列之「Git简介」
- js单选按钮动画特效
- c++获取注册表中程序的安装路径
- 从0开始学习Git系列之「Git初阶」
- POJ 1722 SUBTRACT 背包
- AngularJs ng-repeat 必须注意的性能问题 - 灰机_不会飞
- <转>SFTP 和FTPS的区别是什么?
- Lua+Nginx 安装
- 从0开始学习Git系列之「Git中阶」
- lLinux命令-4:mkdir(Make Directory)命令
- 混合开发的大趋势之 一个Android程序员眼中的 React.js 箭头函数,const, PropTypes
- 嵌入式QT文件管理显示磁盘中文文件名
- 文件的上传下载