为什么这份代码第一层for从0开始可以ac
#include <iostream>
using namespace std;
#define maxn 1010
#define ll long long
ll n , s ;
ll w1[maxn] ,w2[maxn] , v[maxn] , f[maxn] ;
int main(){
cin>>n>>s;
for(int i = 1 ; i <= n ; i++)
cin>>w1[i]>>w2[i]>>v[i] ;
for(int i = 0 ; i <= n ; i++)
for(int j = s ; j >= 0 ; j--){
if(j >= v[i])
f[j] = max(f[j] + w1[i] , f[j - v[i]] + w2[i]) ;
else
f[j] += w1[i] ;
}
cout<<f[s] * 5 ;
return 0 ;
}
但是从1开始只能40pts?
#include <iostream>
using namespace std;
#define maxn 1010
#define ll long long
ll n , s ;
ll w1[maxn] ,w2[maxn] , v[maxn] , f[maxn] ;
int main(){
cin>>n>>s;
for(int i = 1 ; i <= n ; i++)
cin>>w1[i]>>w2[i]>>v[i] ;
for(int i = 1 ; i <= n ; i++)
for(int j = s ; j >= 0 ; j--){
if(j >= v[i])
f[j] = max(f[j] + w1[i] , f[j - v[i]] + w2[i]) ;
else
f[j] += w1[i] ;
}
cout<<f[s] * 5 ;
return 0 ;
}