10 3 4 0.1 4 0.2 5 0.3 0 0
44.0%HintYou should use printf("%%") to print a ‘%‘.
自从集训后就没做过DP,先做个简单的,但是还没理解透,以后再自己研究研究....
AC代码:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 10005; double dp[maxn]; int main() { int n, m, fee[maxn]; double pro[maxn]; while(scanf("%d %d", &n, &m), n || m) { memset(dp, 0, sizeof(dp)); for(int i=1; i<=m; i++) { scanf("%d %lf", &fee[i], &pro[i]); } for(int i=0; i<=n; i++) dp[i] = 1.0; for(int i=1; i<=m; i++) { for(int j=n; j>=fee[i]; j--) { if(dp[j] > dp[j-fee[i]]*(1.0-pro[i])) dp[j] = dp[j-fee[i]]*(1.0-pro[i]); } } printf("%.1lf%%\n", (1-dp[n])*100.0); } return 0; }
HDU-1203-I NEED A OFFER! (简单DP!)
原文:http://blog.csdn.net/u014355480/article/details/41382087