2020ICPC 昆明热身赛 C.Statues(小思维)
Posted issue是fw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020ICPC 昆明热身赛 C.Statues(小思维)相关的知识,希望对你有一定的参考价值。
因为雕像一定是重量从小到大放过来的
所以只要直到之前放了几个雕像,就直到现在要放什么雕像
定义 f [ i ] [ j ] f[i][j] f[i][j]表示前 i i i个位置放了 j j j个雕像的最小代价
一个简简单单的 O ( n 2 ) O(n^2) O(n2)的 d p dp dp就搞定了
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,k,f[5009][5009];
typedef pair<int,int>p;
vector<p>vec;
signed main()
{
cin >> n >> k;
for(int i=1;i<=k;i++)
{
p now; scanf("%lld%lld",&now.second,&now.first );
vec.push_back( now );
}
sort( vec.begin(),vec.end() );
memset( f,0x3f,sizeof f );
for(int i=0;i<=n;i++) f[i][0] = 0;
for(int i=1;i<=n;i++)
for(int j=1;j<=i && j<=k;j++)
f[i][j] = min( f[i-1][j],f[i-1][j-1]+vec[j-1].first*abs(i-vec[j-1].second) );
cout << f[n][k];
}
以上是关于2020ICPC 昆明热身赛 C.Statues(小思维)的主要内容,如果未能解决你的问题,请参考以下文章
2020ICPC 昆明 M.Stone Games(思维+可持久化线段树)