題目:
鏈接:點擊打開鏈接
題意:
roy搶銀行,知道每個銀行的存款和被抓的概率,以及Roy能夠被抓的概率,求他能夠搶劫的最多的money。
思路:
dp[i]表示搶劫i塊錢不被抓的概率,當i==0時,一定不會被抓,即dp[0] = 1;
代碼:
#include#include #include using namespace std; #define MAXN 110 int m[MAXN],t,n; double p[MAXN],P; double dp[MAXN*100]; double max(double a,double b) { return a>b ? a:b; } int main() { //freopen("input.txt","r",stdin); int sum; cin>>t; while(t--) { memset(dp,0,sizeof(dp)); dp[0] = 1; sum = 0; cin>>P>>n; for(int i=0; i >m[i]>>p[i]; sum += m[i]; } for(int i=0; i =m[i]; j--) { dp[j] = max(dp[j],dp[j-m[i]]*(1-p[i])); } } for(int i=sum; i>=0; i--)//注意從大到小,只要符合救輸出,即為能得到的最多的money { if(dp[i]>=(1-P)) { printf("%d\n",i); break; } } } return 0; }