社区讨论

48分求问,贪心二分悬2关

P11188「KDOI-10」商店砍价参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m2cvjml6
此快照首次捕获于
2024/10/17 13:42
去年
此快照最后确认于
2025/11/04 17:01
4 个月前
查看原帖
RT
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int T;
string str;
ll v[12];
const int N=1e5+2;
ll mp[12][N];
ll ff[12];
ll allcnt[12];
ll u1,u2,u3,u4,u5;
bool check(int t1,int t2,int t3,int t4,int t5){
	u1=mp[t1][1];
	if(t1!=0 && u1>allcnt[t1])return 0;
	u2=lower_bound(mp[t2]+1,mp[t2]+1+allcnt[t2],mp[t1][u1]+1)-mp[t2];
	
	if(t2!=0 && u2>allcnt[t2])return 0;
	u3=lower_bound(mp[t3]+1,mp[t3]+1+allcnt[t3],mp[t2][u2]+1)-mp[t3];
	
	if(t3!=0 && u3>allcnt[t3])return 0;
	u4=lower_bound(mp[t4]+1,mp[t4]+1+allcnt[t4],mp[t3][u3]+1)-mp[t4];
	
	if(t4!=0 && u4>allcnt[t4])return 0;
	u5=lower_bound(mp[t5]+1,mp[t5]+1+allcnt[t5],mp[t4][u4]+1)-mp[t5];
	
	if(t5!=0 && u5>allcnt[t5])return 0;
	return 1;
}
ll tmd[12];
ll nm[12];
ll ans;
ll f(int t1,int t2,int t3,int t4,int t5){
	int tmdn=0;
	for(int i=1;i<=9;i++)nm[i]=tmd[i]=0;
	if(t1!=0)tmd[++tmdn]=t1;
	if(t2!=0)tmd[++tmdn]=t2;
	if(t3!=0)tmd[++tmdn]=t3;
	if(t4!=0)tmd[++tmdn]=t4;
	if(t5!=0)tmd[++tmdn]=t5;
	ll tans=0;
	for(int i=1;i<=tmdn;i++){
		tans=tans+tmd[i]*ff[tmdn-i];
		if(tans>ans)return tans;
		nm[tmd[i]]++;
	}
	for(int i=1;i<=9;i++){
		tans=tans+(allcnt[i]-nm[i])*v[i];
		if(tans>ans)return tans;
	}
	return tans;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>T;
	cin>>T;
	ff[0]=1;
	for(int i=1;i<=6;i++)ff[i]=ff[i-1]*10;
	while(T--){
		for(int i=0;i<=9;i++)allcnt[i]=0;
		cin>>str;
		mp[0][++allcnt[0]]=0;
		for(int i=0;i<str.length();i++){
			mp[str[i]-'0'][++allcnt[str[i]-'0']]=(i+1);
		}
		for(int i=1;i<=9;i++){
			if(allcnt[i]==0)continue;
			sort(mp[i]+1,mp[i]+1+allcnt[i]);
		}
		ans=0;
		for(int i=1;i<=9;i++){
			cin>>v[i];
			ans=ans+v[i]*allcnt[i];
		}
		for(int i=0;i<=9;i++){
			for(int j=0;j<=9;j++){
				for(int k=0;k<=9;k++){
					for(int l=0;l<=9;l++){
						for(int r=0;r<=9;r++){
							if(check(i,j,k,l,r)){
								ans=min(ans,f(i,j,k,l,r));
							}
						}
					}
				}
			}
		}
		cout<<ans<<'\n';
	}
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...