Submission #1748562
Source Code Expand
#include <bits/stdc++.h>
#define REP(i,a,b) for(int i=(a);i<(b);i++)
#define RREP(i,a,b) for(int i=(a);i>=(b);i--)
#define pq priotity_queue
typedef long long ll; typedef long double ld;
using namespace std;
const int INF=1e9, MOD=1e9+7, around[]={0,1,1,-1,-1,0,-1,1,0,0};
const ld PI=abs(acos(-1));
int n,m,a;
int main(){
cin >> n >> m;
int s[100010][25]={},li[25];
REP(i,0,n){
cin >> a;
s[i+1][a-1]++;
li[a-1]++;
}
REP(i,0,n) REP(j,0,m) s[i+1][j]+=s[i][j];
int dp[1<<20];
fill(dp,dp+sizeof(dp)/sizeof(dp[0]),INF); dp[0]=0;
REP(i,0,(1<<m)){
int pos=0;
REP(j,0,m) if((i>>j)&1) pos+=li[j];
REP(j,0,m){
if((i>>j)&1) continue;
dp[i+(1<<j)]=min(dp[(i+(1<<j))],dp[i]+li[j]-(s[pos+li[j]][j]-s[pos][j]));
//bitを光らせて比較する。
}
}
cout << dp[(1<<m)-1] << endl;
return 0;
}
Submission Info
Submission Time |
|
Task |
D - ぬいぐるみの整理 (Plush Toys) |
User |
ecasdqina |
Language |
C++14 (GCC 5.4.1) |
Score |
100 |
Code Size |
857 Byte |
Status |
AC |
Exec Time |
168 ms |
Memory |
14080 KB |
Judge Result
Set Name |
set01 |
set02 |
set03 |
set04 |
set05 |
Score / Max Score |
20 / 20 |
20 / 20 |
20 / 20 |
20 / 20 |
20 / 20 |
Status |
|
|
|
|
|
Set Name |
Test Cases |
set01 |
data1 |
set02 |
data2 |
set03 |
data3 |
set04 |
data4 |
set05 |
data5 |
Case Name |
Status |
Exec Time |
Memory |
data1 |
AC |
7 ms |
14080 KB |
data2 |
AC |
8 ms |
14080 KB |
data3 |
AC |
27 ms |
14080 KB |
data4 |
AC |
73 ms |
14080 KB |
data5 |
AC |
168 ms |
14080 KB |