社区讨论
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 条回复,欢迎继续交流。
正在加载回复...