站外题求助
  • 板块题目总版
  • 楼主umirin
  • 当前回复5
  • 已保存回复5
  • 发布时间2025/8/4 15:11
  • 上次更新2025/8/4 20:03:20
查看原帖
站外题求助
1404765
umirin楼主2025/8/4 15:11

原题:HDU 2955 Robberies

WA 80pts怀疑被卡精度

#include<bits/stdc++.h>
using namespace std;//80pts,WA on #6 #7 
long long t,n,m[110],sum;
int ans;
double maxp,pi,p[110],f[1000100];
int main(){
	cin>>t;
	while(t--){
		sum=0;
		memset(f,0,sizeof(f));
		cin>>maxp>>n;
		for(int i=1;i<=n;i++){
			cin>>m[i]>>pi;//m[i]是第i家银行能抢到的钱 
			p[i]=1.0-pi;//数组存每家银行安全的概率 
			sum=sum+m[i];
		}
		f[0]=1;
		for(int i=1;i<=n;i++){
			for(int j=sum;j>=m[i];j--){
				f[j]=max(f[j],f[j-m[i]]*p[i]);// f[i]用来存在抢到i钱的情况下安全的概率 
			}
		}
		f[0]=1;
		ans=0;
		for(int i=sum;i>=0;i--){
			if(1.0-f[i]<=maxp){//最终被抓的概率=1-每家抢过的银行的安全的概率相乘,这里如果是if(1-f[i]<maxp)则70pts,WA on #4 #6 #7 
				ans=max(ans,i);
				break;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}
2025/8/4 15:11
加载中...