Memory: 612KTime: 16 MSLanguage: G++Faults:2 wa + ...Algorithm: dp /* 由“The value of a bond is always a multiple of $1 000”可以推知 可以把所有的value除以1000来简化dp “The interest of a bond is never more than 10% of its value.”可以 知道1.1^40 < 46 只需要记录 0~46000000的dp 剩下的就是dp的问题了 */ #include<stdio.h> #include<iostream> #include<memory.h> using namespace std; int N, start, year, d, v[11], in[11]; int dp[46000]; bool input() { memset(dp,0,sizeof(dp)); cin >> start >> year; cin >> d; for(int i = 0; i < d; i++) { cin >> v[i] >> in[i]; v[i] /= 1000; } return true; } int f() { int tmp,_in,_v; for(int i = 0; i < d; i++) { tmp = 46000 - v[i]; _v = v[i]; _in = in[i]; for(int j = 0; j < tmp; j++) if( _in + dp[j] > dp[j + _v]) dp[j + _v] = _in + dp[j]; } for(int i = 0; i < year; i++) { int max(0); for(int j = 0; j <= start/1000; j++) if(dp[j] > max) max = dp[j]; start += max; } return start; } int main() { cin >> N; while(N--) { input(); cout << f() << endl; } return 0; }