一个问题
查看原帖
一个问题
221551
Bker_楼主2022/7/28 17:36

为什么这份代码第一层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 ;
}
2022/7/28 17:36
加载中...