hdu--1421--dp&&滚动数组
2014-08-02 10:35
344 查看
每个dp 没个30来分钟 tm的就写不出什么状态转移方程 还是太弱了啊=-=
touch me
其实用滚动数组 就是看你上一个状态转移到当前状态 与 i 前面多少个有关系 因为这里需要用到 i - 2 i - 1那么其实只要用 i % 3就可以了
像上一题 我们只涉及到 i + 1那么只需要 % 2就可以了
这只是一个 大致的方向 具体的操作 其实我们可以根据 简单的 dp转移方程来进行滚动 改变
View Code
CF掉了 好多分啊啊啊啊=-=
today:
好的时光是哪一段并无太大意义
因为所有的时光都是被辜负被浪费的
也只有在辜负浪费之后
才能从记忆里将某一段拎出
拍拍上面沉积的灰尘
感叹它才是最好的时光
touch me
其实用滚动数组 就是看你上一个状态转移到当前状态 与 i 前面多少个有关系 因为这里需要用到 i - 2 i - 1那么其实只要用 i % 3就可以了
像上一题 我们只涉及到 i + 1那么只需要 % 2就可以了
这只是一个 大致的方向 具体的操作 其实我们可以根据 简单的 dp转移方程来进行滚动 改变
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int size = 2010; int weight[size]; int dp[3][size/2]; int main() { cin.sync_with_stdio(false); int n , k; while( cin >> n >> k ) { for( int i = 1 ; i<=n ; i++ ) { cin >> weight[i]; } memset( dp , 0 , 3*(k+2)*sizeof(int) ); sort( weight+1 , weight+n+1 ); for( int i = 2 ; i<=n ; i++ ) { for( int j = 1 ; j<=k ; j++ ) { dp[i%3][j] = dp[(i-2)%3][j-1] + ( weight[i]-weight[i-1] )*( weight[i]-weight[i-1] ); if( i>j*2 ) dp[i%3][j] = min( dp[i%3][j] , dp[(i-1)%3][j] ); } } cout << dp[n%3][k] << endl; } return 0; }
View Code
CF掉了 好多分啊啊啊啊=-=
today:
好的时光是哪一段并无太大意义
因为所有的时光都是被辜负被浪费的
也只有在辜负浪费之后
才能从记忆里将某一段拎出
拍拍上面沉积的灰尘
感叹它才是最好的时光
相关文章推荐
- HDU--1421 -- 搬寝室 [DP] [滚动数组]
- hdu--1176---dp && 滚动数组优化<porker>
- 【hdu 1024】Max Sum Plus Plus —— dp && 滚动数组
- HDU 1024 Max Sum Plus Plus(普通dp && 滚动数组优化)
- HDU 1024 Max Sum Plus Plus (DP·滚动数组)
- hdu 1513 && 1159 poj Palindrome (dp, 滚动数组, LCS)
- 2015多校.Zero Escape (dp减枝 && 滚动数组)
- 2015 Multi-University Training Contest 10 (hdu 5406-5416)数据结构+dp+矩阵快速幂+bitset优化拓扑排序+(dp&树状数组)
- hdu 4576(概率dp+滚动数组)
- HDU 2602 Bone Collector(01二维背包&一维背包&滚动数组优化二维背包的原理 )
- hdu 4576 概率dp+滚动数组
- hdu 4576 Robot(dp+滚动数组)
- hdu 3392(滚动数组优化dp)
- hdu 4576 (简单dp+滚动数组)
- HDU 5119 DP 滚动数组,dp求异或
- hdu(5119)——滚动数组dp
- hdu 1024 dp滚动数组
- HDU - 2294 Pendant (DP滚动数组降维+矩阵快速幂)
- 在DP中使用"滚动数组"
- HDU 4576 (2013杭州邀请赛J题-dp滚动数组优化)