【DP】poj1722
2016-04-02 19:18
302 查看
每次取出两个数相减,其实就是给整个数列标加减号,想明白这一点这个题就好做了,一眼看上去很像一个区间DP啊,然后第二个数一定是只能减的。。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<algorithm> #include<cstring> using namespace std; int T,n,a[101000],f[110][20100],biao[110]; int main() { while (~scanf("%d%d",&n,&T)) { memset(f,0,sizeof(f)); memset(biao,0,sizeof(biao)); for (int i=1;i<=n;i++) scanf("%d",&a[i]); f[1][10000+a[1]]=2; f[2][10000+a[1]-a[2]]=1; for (int i=3;i<=n;i++) for (int j=0;j<=20000;j++) { if (f[i-1][j]<=0) continue; if (j+a[i]<=20000) f[i][j+a[i]]=2; if (j-a[i]>=0) f[i][j-a[i]]=1; //printf("%d\n",f[3][10006]); } for (int i=n,j=10000+T;i;i--) { //cout<<i<<" "<<f[i][j]<<" "<<j<<endl; if (f[i][j]==1) { biao[i]=1; j=j+a[i]; } else { biao[i]=2; j=j-a[i]; } } for (int i=2,cnt=0;i<=n;i++) if (biao[i]==2) { printf("%d\n",i-1-cnt); cnt++; } for (int i=2;i<=n;i++) if (biao[i]==1) printf("1\n"); } return 0; }
相关文章推荐
- iOS自定义显示30天日历
- Oracle11g ORA-12560: TNS: 协议适配器错误
- Scala环境配置
- Python模块介绍(含50个最经典模块)
- 【Codeforces】659A - Round House
- LSTM神经网络Demystifying LSTM neural networks
- CCF 高速公路 tarjan求强连通分量
- LC60 Permutation Sequence
- poj 1789--Truck History 最小生成树(prim)
- 欢迎使用CSDN-markdown编辑器
- 【杭电oj】2083 - 简易版之最短距离(最短距离)
- Quartz使用示例总结
- javamail发送邮件(转)
- js设计模式-桥接模式
- [CodeVS4655]序列终结者 做题笔记
- iOS应用系统获取qq和拨打电话
- 传奇世界2测试
- THINKPHP学习
- win7桌面便签。自带的
- 设计模式----代理模式