大佬们帮忙看看,60分TLE感谢
查看原帖
大佬们帮忙看看,60分TLE感谢
1029588
Lao_Wang_Ba楼主2024/11/6 10:53
#include<bits/stdc++.h>
#define MAX 30000000
using namespace std;

int n,L,f[2001][2],dp[MAX],maxx=0,ans=0;

int main(){
    cin>>n>>L;
    for(int i=1;i<=n;i++){
        cin>>f[i][0]>>f[i][1];
        maxx+=f[i][0];
        ans+=f[i][1];
    }
    if(ans<L){
    cout<<"no solution";
    return 0;
    }    
    if(ans==L){
    cout<<maxx;
    return 0;
    }
//    int dp[maxx+1]={0};
    for(int i=1;i<=n;i++){
        for(int j=maxx;j>=f[i][0];j--){
            dp[j%MAX]=max(dp[j%MAX],dp[(j-f[i][0])%MAX]+f[i][1]);
        }
    }
    for(int i=0;i<=maxx;i++)
        if(dp[i%MAX]>=L){
            cout<<i;
            return 0;
        }
    cout<<"no solution";

return 0;
}
2024/11/6 10:53
加载中...