Codeforces 590D Top Secret Task
来源:互联网 发布:更改照片的软件 编辑:程序博客网 时间:2024/04/30 01:12
CF 590D
题目大意:
给出一个长度为N的序列,同时你有S次机会交换任意两个相邻位置的数,希望前K个数的和最小。
错误思路。。
- 很容易想到状态为:
f[i][j]: 前i个数交换了j次的最小和。 然后就在
f[k][j]: j∈[0,S] 中找到一个最小的值就是答案了。想法总是很好的。但是转移怎么办???
按照正常的想法可以这样:
这个方程表示如果第i个数可以被交换,则显然交换j次可以最远更新到a[i+j],然后交换a[i+k]与a[i];
But!!
Dp 是不能有后效性的!!
而当我们交换若干次后,a[i+k]可能早已不是以前a[]中的数值,即它可能已经被交换过了。所以,这个方程是错的。
正解
状态不变,但是方程要变为f[i+1][j+k-(i+1)]=min(f[i+1][j+k-(i+1)],f[i][j]+a[k]);
- 由当前的f[i][j]来更新f[i+1][j+k-(i+1)]【小->大】
- 为了没有后效性,一层循环由小到大枚举,一层由大到小枚举。
Attention:
题目中S的范围很大,10^9但是并不需要这么多,事实上对于长度为n的序列,最多只能交换n*(n-1)次,这个很好理解,也可以打表确定一下;
Code:
#include <stdio.h>#include <string.h>#define INF 99999999;int n,k,s,ans;int a[151],f[151][150*150];int min(int a,int b){return a<b?a:b;}int main(){ scanf("%d%d%d",&n,&k,&s); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } memset(f,0x3f,sizeof(f)); f[0][0]=0; for(int k=1;k<=n;k++) { for(int i=k-1;i>=0;i--) { for(int j=0;j<=k*i;j++) { if(f[i][j]!=0x3f3f3f3f) { f[i+1][j+k-(i+1)]=min(f[i+1][j+k-(i+1)],f[i][j]+a[k]); } } } } memset(&ans,127,sizeof(int)); for(int j=0;j<=min(s,(n*(n)));j++) { ans=min(ans,f[k][j]); } printf("%d\n",ans); return 0;}
P.S. 自动忽略ans的赋值就好啦。。
1 0
- codeforces 590D Top Secret Task(dp)
- Codeforces 590D Top Secret Task
- Codeforces #590D: Top Secret Task 题解
- 【DP】 cf 590D Top Secret Task
- Codeforces Round #327 (Div. 1) D. Top Secret Task(DP)
- CF 590D Top Secret Task【dp递推+滚动数组】【好题】
- Codeforces Round #310 (Div. 1) D. Case of a Top Secret 二分 stl应用
- Codeforces 190D Non-Secret Cypher
- Codeforces 431 D. Random Task
- [Codeforces Round #310 DIV1D (CF555D)] Case of a Top Secret
- CodeForces Round #120 (190D) - Non-Secret Cypher
- codeforces 190D Non-Secret Cypher(two pointers)
- codeforces 190D Non-Secret Cypher 双指针
- Codeforces 190D Non-Secret Cypher【思维+RMQ+二分】
- Top Secret Microsoft Code
- D. Non-Secret Cypher
- Codeforces 11D A Simple Task (状态压缩DP)
- CodeForces 11D - A Simple Task 状态压缩DP
- 基础篇(十一) 布局(Layout)和属性(Attribute)
- Jquery常用技巧总结
- Centos VSFTP 安装
- 智能汽车自主决策机制的致命缺陷
- 【SSH】--框架搭建错误及项目中问题
- Codeforces 590D Top Secret Task
- 手机网页js计时器在浏览器处于后台的时候被冷冻的问题。
- 枚举
- Jquery调用后台的RadioButtonList_SelectedIndexChanged事件
- 协同推荐SlopeOne 算法
- Android 照片墙完整版,完美结合LruCache和DiskLruCache
- DateUtil公共类
- WebView
- [Cool Node.js] Node.js简介