题解 | #购物单#
购物单
http://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4
#include <iostream>
#include <vector>
#include <sstream>
using namespace std;
int main() {
int money, num;
cin >> money >> num;
cin.ignore();
money /= 10;
int res(0);
string s;
vector<vector<int>> prices(num + 1, vector<int>(3, 0));
vector<vector<int>> values(num + 1, vector<int>(3, 0));
int num_obj = 0;
int _price(0), _value(0), _idx(0);
for(int i = 0 ;i < num; ++i) {
getline(cin, s);
//cout << s << endl;
stringstream ss(s);
ss >> _price >> _value >> _idx;
_price /= 10;
//cout << _price << "," <<_value << "," << _idx << endl;
if(_idx == 0) {
++num_obj;
prices[num_obj][0] = _price;
values[num_obj][0] = _price * _value;
} else {
if(prices[_idx][1] != 0) {
//cout << "init annex 2"<< endl;
prices[_idx][2] = _price;
//cout << prices[_idx][2] << endl;
values[_idx][2] = _price* _value;
//cout << values[_idx][2] << endl;
} else {
//cout << "init annex 1"<< endl;
prices[_idx][1] = _price;
//cout << prices[_idx][1] << endl;
values[_idx][1] = _price * _value;
//cout << values[_idx][1] << endl;
}
}
}
//print_vector(prices);
//print_vector(values);
vector<vector<int>> dp(num_obj + 1, vector<int>(money + 1, 0));
//cout << "num_obj:" << num_obj << ", money:" << money << endl;
for(int i = 1; i <= num_obj; ++i) {
int price_primary = prices[i][0];
int price_annex_1 = prices[i][1];
int price_annex_2 = prices[i][2];
int value_primary = values[i][0];
int value_annex_1 = values[i][1];
int value_annex_2 = values[i][2];
//cout << price_primary << ","<< price_annex_1 << ","<< price_annex_2 << endl;
for(int j = 1; j <= money; ++j) {
int tmp_max = dp[i-1][j];
if(j >= price_primary)
tmp_max = max(tmp_max, dp[i-1][j-price_primary] + value_primary);
if(j >= price_primary + price_annex_1)
tmp_max = max(tmp_max, dp[i-1][j-price_primary-price_annex_1] +
value_primary + value_annex_1);
if(j >= price_primary + price_annex_2)
tmp_max = max(tmp_max, dp[i-1][j-price_primary-price_annex_2] +
value_primary + value_annex_2);
if(j >= price_primary + price_annex_1 + price_annex_2)
tmp_max = max(tmp_max, dp[i-1][j-price_primary
-price_annex_1
-price_annex_2] +
value_primary + value_annex_1 + value_annex_2);
dp[i][j] = tmp_max;
}
}
res = dp[num_obj][money] * 10;
cout << res << endl;
return 0;
}请教各位大神,请问下这个为啥只通过了7个样例?



