problemscpp
A collection of my answers to algorithm problems in c++.
| 函数
acwing::acwing3445 命名空间参考

  1. 点菜问题
更多...

struct  status
 

函数

int main (istream &cin, ostream &cout)
 
 TEST (acwing3445, case1)
 
 TEST (acwing3445, case2)
 

详细描述

  1. 点菜问题

函数说明

◆ main()

int acwing::acwing3445::main ( istream &  cin,
ostream &  cout 
)

在文件 acwing408.cpp1839 行定义.

1839 {
1840 int c, n;
1841 cin >> c >> n;
1842 vector<int> p = vector<int>(n);
1843 vector<int> v = vector<int>(n);
1844 for(int i = 0; i < n; i++) {
1845 cin >> p[i] >> v[i];
1846 }
1847 vector<status> dp = vector<status>(c + 1, status{
1848 .v = 0,
1849 .free = vector<bool>(n, true)});
1850 int max_v = 0;
1851 for(int i = 0; i <= c; i++) {
1852 for(int j = 0; j < n; j++) {
1853 max_v = max(max_v, dp[i].v);
1854 if(dp[i].free[j]) {
1855 int next_v = dp[i].v + v[j];
1856 int next_c = i + p[j];
1857 if(next_c <= c && next_v > dp[next_c].v) {
1858 dp[next_c].v = next_v;
1859 dp[next_c].free = vector<bool>(dp[i].free);
1860 dp[next_c].free[j] = false;
1861 }
1862 }
1863 }
1864 }
1865 cout << max(max_v, dp[c].v);
1866 return 0;
1867 }

引用了 acwing::acwing3445::status::v.

被这些函数引用 TEST().

◆ TEST() [1/2]

acwing::acwing3445::TEST ( acwing3445  ,
case1   
)

在文件 acwing408_test.cpp2007 行定义.

2007 {
2008 istringstream in("90 4\n"
2009 "20 25\n"
2010 "30 20\n"
2011 "40 50\n"
2012 "10 18");
2013 auto out = ostringstream();
2014 main(in, out);
2015 const auto ans = out.str();
2016 ASSERT_EQ("95", ans);
2017 }
int main(int argc, char **argv)
Definition: main.cpp:5

引用了 main().

◆ TEST() [2/2]

acwing::acwing3445::TEST ( acwing3445  ,
case2   
)

在文件 acwing408_test.cpp2019 行定义.

2019 {
2020 istringstream in("300 20\n"
2021 "19 24\n"
2022 "26 3\n"
2023 "2 5\n"
2024 "17 8\n"
2025 "13 17\n"
2026 "10 9\n"
2027 "19 9\n"
2028 "30 4\n"
2029 "23 24\n"
2030 "9 9\n"
2031 "5 22\n"
2032 "10 15\n"
2033 "9 10\n"
2034 "15 29\n"
2035 "20 14\n"
2036 "8 12\n"
2037 "4 23\n"
2038 "24 22\n"
2039 "16 13\n"
2040 "5 26");
2041 auto out = ostringstream();
2042 main(in, out);
2043 const auto ans = out.str();
2044 ASSERT_EQ("298", ans);
2045 }

引用了 main().