bzoj2708木偶(dp)
来源:互联网 发布:java数据类型有哪些 编辑:程序博客网 时间:2024/05/01 23:27
dp问题。
设f [ i ]表示前 i 个数里最多能扔多少个,f [ i ]=max(f [ i ], f [ j ]+find(j+1, i ));
这里的find表示从第j+1个数到第i个数最多扔掉几个,采用枚举扔的个数,若在扔的一堆中能互相配对,在没扔的一堆中任意两个不能配对,就是可行的。
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int n;int a[2000];int cmp(int a,int b){return a<b;}int f[2000];int find(int st,int to){if(a[to]-a[st]<=1){return 0;}for(int i=1;i<=to-st+1;i++){for(int j=st+i;j<=to;j++){if(abs(a[j]-a[j-i])>1){return i-1;}}if(abs(a[st+i-1]-a[to-i+1])<=1){return i-1;}}return to-st+1;}int main(){//freopen("puppet,in","r",stdin);//freopen("puppet.out","w",stdout);while(scanf("%d",&n)!=EOF){memset(f,0,sizeof(f));for(int i=1;i<=n;i++){scanf("%d",&a[i]);}sort(a+1,a+1+n,cmp);f[1]=0;for(int i=2;i<=n;i++){for(int j=0;j<i;j++){f[i]=max(f[j]+find(j+1,i),f[i]);}}printf("%d\n",f[n]);}return 0;}以下摘自他人博客:
其实dp很难逃出3种思路:
1、一维线性dp:每次考虑i时,选择最优子问题要么在i-1,要么在1...i-1里;
2、二维线性dp:考虑(i,j)子问题时,选择最优子问题要么在(i+1,j)、(i,j-1),要么在i<= k <=j,在k里;
3、树形dp:考虑i节点最优时,选择子节点最优,一般融合了01背包dp的双重dp。
0 0
- bzoj2708木偶(dp)
- 【bzoj2708】【Violet 1】【木偶】【dp】
- BZOJ2708 [Violet 1]木偶
- BZOJ2708: [Violet 1]木偶
- BZOJ 2708 [Violet 1]木偶 DP
- bzoj 2708 [Violet 1]木偶 dp 贪心
- [DP 思路题] BZOJ 2708 [Violet 1]木偶
- 8086/8087寄存器(转载自小木偶)
- 美式木偶剧
- 我不想做木偶
- Programmers ,我们是否是木偶?
- 自动化配置程序puppet(木偶)
- bzoj 2708: [Violet 1]木偶
- 网络小木偶 v0.92 官方
- [Violet 1]木偶 SRM308 DIV1 1000pt
- react中智能组件和木偶组件
- React之智能组件和木偶组件
- 有多少网民成了别人的木偶?
- [LeedCode OJ]#221 Maximal Square
- 汇编语言学习(二)
- ironic related projects in git
- Courses
- leetcode Reverse Integer java基本编程学习笔记(一)
- bzoj2708木偶(dp)
- Android pm命令 以及在终端安装卸载安装包方法
- 用Java录音并播放
- NSIS 控制面版显示卸载信息
- fpga入门学习之一:fpga简介
- hdu 1814 Peaceful Commission (2-sat入门)
- TLD算法流程说明--episode1
- c语言解析json数据
- 欢迎使用CSDN-markdown编辑器