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
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
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