World is Mine

首先要考虑两个人的策略分别是什么,显然A每次要吃最小的蛋糕,B要么不吃,要么就把一种类的蛋糕全部吃完。所以也是动态规划dp[i][j]表示吃第i种蛋糕,B吃了j次后x的最小值
`#include<bits/stdc++.h>

using namespace std;

define int long long

define ll __int128

define endl '\n'

typedef pair<int, int> pii;

void solve() {
int n;
cin>>n;

vector<int>a(n+1),cnt(n+1);

for(int i=1;i<=n;i++){
    cin>>a[i];
    cnt[a[i]]++;
}

vector<vector<int>>dp(n+1,vector<int>(n+1,1e15));
dp[0][0]=0;

for(int i=1;i<=n;i++){
    for(int j=0;j<=n/2;j++){
        if(!cnt[i]){
            dp[i][j]=dp[i-1][j];
            continue;
        }
        if(j+cnt[i]<=n/2&&j+cnt[i]<=dp[i-1][j]){
        	dp[i][j+cnt[i]]=min(dp[i][j+cnt[i]],dp[i-1][j]);
		}
        dp[i][j]=min(dp[i][j],dp[i-1][j]+1);
    }
}

int ans=1e15;

for(int i=0;i<=n/2;i++){
    ans=min(ans,dp[n][i]);
}

cout<<ans<<endl;

}

signed main() {
int T = 1;
cin >> T;
while (T--) {
solve();
}
return 0;
}`

posted @ 2025-02-16 20:27  十柒*  阅读(1)  评论(0编辑  收藏  举报