过得了!
by Alextokc @ 2016-12-12 13:48:55
```cpp
#include <algorithm>
#include <bitset>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <cstring>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <list>
#include <iterator>
#define n1 1000
#define n2 2000
#define n3 3000
#define n4 4000
#define n5 5000
#define n10 10000
#define n20 20000
#define SIZE(X) ((int64)(X.size()))
#define LENGTH(X) ((int64)(X.length()))
using namespace std;
typedef long long int64;
typedef unsigned long long uint64;
int64 gcd(int64 a,int64 b){ if (!b) return a;return gcd(b , a%b);}
int64 lcm(int64 a,int64 b){ return a/gcd(a , b)*b; }
int64 binary_pow(int64 x,int64 n,int64 mod){ if (!n) return true;
else if (!(n&1)) return binary_pow(x * x % mod, n / 2 , mod);
else if (n&1) return binary_pow(x * x % mod, n / 2 , mod) * x % mod; }
inline int64 max_int(int64 a,int64 b){ if (a>b) return a;else return b; }
inline double max_double(double a,double b){ if (a>b) return a;else return b; }
inline float max_float(float a,float b){ if (a>b) return a;else return b; }
inline int64 min_int(int64 a,int64 b){ if (a<b) return a;else return b; }
inline double min_double(double a,double b){ if (a<b) return a;else return b; }
inline float min_int(float a,float b){ if (a<b) return a;else return b; }
inline void swap_int(int64 &a,int64 &b){ int64 temp = a;a = b;b = temp; }
inline void swap_double(double &a,double &b){ double temp = a;a = b;b = temp; }
inline void swap_float(float &a,float &b){ float temp = a;a = b;b = temp; }
inline bool is_prime(int64 n){ if (n<=1) return false;int64 m=(int)floor(sqrt(n)+0.5);
for (int64 i=2;i<=m;++i) if (n%i==0) return false;return true; }
inline bool is_odd(int64 n){ if (n&1) return true;else return false; }
inline bool is_even(int64 n){if (!(n&1)) return true;else return false;}
inline bool compare(int64 a,int64 b){ return a>b; }
inline int64 stoi(string n){ int64 s = 0;if (n[0]=='-'){for ( int64 i=1;i<n.size();++i)s = s * 10 + (n[i]-'0');
s = -s;return s; }else { for (int64 i=0;i<n.size();++i)s = s * 10 + (n[i]-'0');return s; } }
inline string numtostr(int64 x){char s[199];sprintf(s,"%lld",x);string ans=s;return ans;}
inline bool is_upper(char c){ return c>='A' && c<='Z'; }
inline bool is_lower(char c){ return c>='a' && c<='z'; }
inline bool is_letter(char c){ return c>='A' && c<='Z' || c>='a' && c<='z'; }
inline bool is_digit(char c){ return c>='0' && c<='9'; }
inline char tolower(char c){ return (is_upper(c))?(c+32):c; }
inline char toupper(char c){ return (is_lower(c))?(c-32):c; }
inline int64 sqr(int64 x){ return x*x;}
inline bool str_empty(string n){ if (n.length()==0) return true;else return false; }
inline bool vec_empty(vector<int64> n){ if (n.size()==0) return true;else return false; }
inline bool deq_empty(deque<int64> n){ if (n.size()==0) return true;else return false; }
inline bool sta_empty(stack<int64> n){ if (n.size()==0) return true;else return false; }
inline bool que_empty(queue<int64> n) { if (n.size()==0) return true;else return false; }
inline bool str_emptyx(string n){ if (n.length()==0) return true;else return false; }
inline bool vec_emptyx(vector<int> n){ if (n.size()==0) return true;else return false; }
inline bool deq_emptyx(deque<int> n){ if (n.size()==0) return true;else return false; }
inline bool sta_emptyx(stack<int> n){ if (n.size()==0) return true;else return false; }
inline bool que_emptyx(queue<int> n) { if (n.size()==0) return true;else return false; }
int C[n20] , W[n20];
int dp[n20];
int main(){
int V , cishu;
cin >> cishu >> V;
for (int i=1;i<=cishu;++i) cin >> C[i] >> W[i];
for (int i=1;i<=cishu;++i){
for (int v=V;v>=C[i];--v){
dp[v] = max(dp[v] , dp[v-C[i]]+W[i]);
}
}
cout << dp[V] << endl;
return 0;
}
//正解
```
by Alextokc @ 2016-12-16 16:28:27
这是一维的
by M_seа @ 2017-01-30 22:23:12
太坏了666
by Lance1ot @ 2017-04-08 20:11:34
二维的话空间会爆炸……但是二楼什么鬼啊2333333333
by 暮影灰狼 @ 2017-06-28 21:31:21
int改short能过
by ykkz000 @ 2018-08-23 11:28:33