SRM 308 Wardrobe
来源:互联网 发布:ami桌面知乎 编辑:程序博客网 时间:2024/06/05 14:44
题目大意 给出螺丝钉和匹配的螺丝帽每个大小为pi
实际中螺丝钉可以与正负1的螺丝帽匹配。每次取出一个螺丝钉找一个匹配的螺丝帽匹配,问最后最多能剩下多少个不匹配的螺丝钉。
首先排序,然后DP,f[i]=max(f[j], calc(j+1,i))
calc(j+1,i)表示这段直接匹配最多多少个剩余,贪心。枚举扔掉最小的k个螺丝钉和k个最大的螺丝帽看是否情况成立。
两端相邻区间如果存在相互影响的部
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 105;int cost[MAXN][MAXN];int f[MAXN],p[MAXN];int n;int match(int L,int R){ if (abs(p[L]-p[R])<=1) return 0; int ans = 0; for (int k = 1;k<=R-L-1;++k) { bool can = true; for (int i = L;i+k<=R;++i) if (abs(p[i]-p[i+k])>1) can = false; if ((abs(p[L+k-1]-p[R-k+1]) > 1) && can) ans = k; } return ans;}int main(){ while (~scanf("%d",&n)) { for (int i = 1 ; i <=n;++i) scanf("%d", &p[i]); sort(p+1,p+n+1); for (int i = 0 ; i <=n;++i) f[i] = 0; for (int i = 1 ; i <=n;++i) for (int j = i;j <=n;++j) cost[i][j] = match(i,j); for (int i = 1; i <=n;++i) for (int j = 0;j<i;++j) f[i]=max(f[i],f[j]+cost[j+1][i]); cout << f[n] << endl; } return 0;}
分,则可以通过调整改变。
- SRM 308 Wardrobe
- 走光 wardrobe malfunction
- srm
- 商务休闲装 third wardrobe
- topcode srm SRM 557
- 【英文原著 02】- The Lion the witch and the wardrobe
- srm 308 div2 1000(DP, 离散背包+连续背包)
- SRM 443
- SRM 442
- SRM 439
- SRM 438
- SRM 444
- SRM 434
- SRM 445
- SRM 426
- SRM 456
- SRM 467
- SRM 466
- JAVA 字符编码
- 常用的位操作:置位、清零与测试
- 数字标牌(Digital Signage)
- 如何设置ImageButton按键按下去后的 特效----(如类似风车旋转的动画特效)
- UVa 755 - 487--3279
- SRM 308 Wardrobe
- Android 自定义 布局 ListView BaseAadaper 单击高亮选中项
- 【VB/.NET】Converting VB6 to VB.NET
- UVa 748 - Exponentiation
- 岁末总结
- UVa 10106 - Product
- serializeObject——序列化Form表单到一个对象
- 基于阿里云服务器搭建SVN服务器
- Java程序栈信息文件中的秘密(二)