您的位置:首页 > 其它

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转移方程来进行滚动 改变

#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:

  好的时光是哪一段并无太大意义

  因为所有的时光都是被辜负被浪费的

  也只有在辜负浪费之后

  才能从记忆里将某一段拎出

  拍拍上面沉积的灰尘

  感叹它才是最好的时光
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: