#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <cstring>
#include <climits>
#include <algorithm>
#include <cmath>
using namespace std;
int dp[100001][101];
bool okay[100001];
/*class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
vector<int>::iterator it1, it2;
int ans;
int k = (1<<31)-1;
for (int i = 0; i < nums.size(); ++i) {
int n = target - nums[i];
it1 = nums.begin() + i + 1;
it2 = nums.end() - 1;
while (it1 < it2) {
int n1 = *it1;
int n2 = *it2;
if(abs(n-n1-n2))
}
}
}
};*/
int main() {
int n, m;
while(cin >> n >> m){
if (n == 0 || m == 0)break;
memset(dp, 0, sizeof(dp));
memset(okay, false, sizeof(okay));
okay[0] = true;
int coins[101];
int numb[101];
int Cnt = 0;
for (int i = 0; i < n; ++i)cin >> coins[i];
for (int i = 0; i < n; ++i)cin >> numb[i];
//sort(numb, numb + n-1);
for (int i = 0; i < n; ++i)dp[0][i] = numb[i];
for (int i = 1; i <= m; ++i) {
for (int j = n - 1; j >= 0; --j) {
if ((i-coins[j]>=0)&&okay[i-coins[j]]&&dp[i-coins[j]][j]>0) {
for (int l = 0; l < n; ++l)dp[i][l] = dp[i - coins[j]][l];
--dp[i][j];
++Cnt;
okay[i] = true;
break;
}
}
}
cout << Cnt << endl;
}
}
以下是原vector版本 同样的错误
#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <cstring>
#include <climits>
#include <algorithm>
#include <cmath>
using namespace std;
vector<int>dp[200099];
/*class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
vector<int>::iterator it1, it2;
int ans;
int k = (1<<31)-1;
for (int i = 0; i < nums.size(); ++i) {
int n = target - nums[i];
it1 = nums.begin() + i + 1;
it2 = nums.end() - 1;
while (it1 < it2) {
int n1 = *it1;
int n2 = *it2;
if(abs(n-n1-n2))
}
}
}
};*/
int main() {
int n, m;
while(cin >> n >> m){
for (int i = 0; i < n;++i) dp[i].clear();
if (n == 0 || m == 0)break;
int coins[200];
int numb[200];
int Cnt = 0;
for (int i = 0; i < n; ++i)cin >> coins[i];
for (int i = 0; i < n; ++i)cin >> numb[i];
for (int i = 0; i < n; ++i)dp[0].push_back(numb[i]);
for (int i = 1; i <= m; ++i) {
for (int j = n - 1; j >= 0; --j) {
if ((i-coins[j]>=0)&&!dp[i - coins[j]].empty()&&dp[i-coins[j]][j]>0) {
dp[i] = dp[i - coins[j]];
--dp[i][j];
++Cnt;
break;
}
}
}
cout << Cnt << endl;
}
}