HDU Fate 未完成

#include <bits/stdc++.h>
using namespace std;
const int N = 10000;
int n;
unsigned long long res=0;
struct Bag{
    int rnval;
    int jyval;
    int weight;
}bag[N];
bool bmp(Bag a,Bag b){
    if(a.rnval<b.rnval){
        return a.jyval<b.jyval;
    }
    if(a.rnval==b.rnval) return a.jyval>b.jyval;
}
struct Dp{
    int dp,p;
}dp[N];
bool bmp2(Dp a, Dp b){
    return a.p<b.p;
}
bool is_out;
int kind,rn,jy,p[N];
int main(){
    ios::sync_with_stdio(false);
    while(cin>>jy>>rn>>kind>>n){
        for (int i = 1; i <= rn; i++) {
            dp[i].dp=0;
            dp[i].p=0;
        }
        is_out=0;
        for (int i = 1; i <= kind; i++) {
            cin>>bag[i].jyval>>bag[i].rnval;
        }
        sort(bag+1,bag+kind+1,bmp);
       // for (int i = 1; i <= kind; i++) cout<<bag[i].jyval<<bag[i].rnval<<endl;
        for (int i = 1; i <= jy; i++) {
            for (int j = bag[i].rnval;j<=rn;j++) {
               //  cout<<dp[j-bag[i].rnval].dp+bag[i].jyval<<" ";
                if(dp[j].dp>=jy) dp[j]=dp[j];
                else{
                    if(dp[j-bag[i].rnval].dp+bag[i].jyval>dp[j].dp){
                        dp[j].dp=dp[j-bag[i].rnval].dp+bag[i].jyval;
                        dp[j].p=dp[j].p+dp[j-bag[i].rnval].p+1;
                    }
                    else  dp[j]=dp[j];
                }
               // cout<<dp[j]<<endl;

            }
            //cout<<endl;
        }
        sort(dp+1,dp+jy+1,bmp2);
        for (int i = 1; i <= jy; i++) {
          //  cout<<dp[i].dp<<" "<<dp[i].p<<endl;
                if(dp[i].dp>=jy&&dp[i].p<=n&&is_out==0){
                    cout<<rn-dp[i].p<<endl;
                    is_out=1;
                }
        }
        if(is_out==0) cout<<"-1"<<endl;
        /*

        cout<<"max="<<dp[rn]<<endl;
        cout<<p[jy]<<endl;
         */
    }


    return 0;
}

 

#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
int n;
unsigned long long res=0;
struct Bag{
    int rnval;
    int jyval;
    int weight;
}bag[N];
bool bmp(Bag a,Bag b){
    if(a.rnval<b.rnval){
        return a.jyval<b.jyval;
    }
    if(a.rnval==b.rnval) return a.jyval>b.jyval;
}
struct Dp{
    int dp,p;
}dp[N];
bool bmp2(Dp a, Dp b){
    return a.p<b.p;
}
bool is_out;
int kind,rn,jy,p[N];
int main(){
    ios::sync_with_stdio(false);
    while(cin>>jy>>rn>>kind>>n){
        for (int i = 1; i <= N; i++) {
            dp[i].dp=0;
            dp[i].p=0;
        }
        is_out=0;
        for (int i = 1; i <= kind; i++) {
            cin>>bag[i].jyval>>bag[i].rnval;
        }
        sort(bag+1,bag+kind+1,bmp);
       // for (int i = 1; i <= kind; i++) cout<<bag[i].jyval<<bag[i].rnval<<endl;
        for (int i = 1; i <= jy; i++) {
            for (int j = bag[i].rnval;j<=rn;j++) {
               //  cout<<dp[j-bag[i].rnval].dp+bag[i].jyval<<" ";
                if(dp[j].dp>=jy) dp[j]=dp[j];
                else{
                    if(dp[j-bag[i].rnval].dp+bag[i].jyval>dp[j].dp){
                        dp[j].dp=dp[j-bag[i].rnval].dp+bag[i].jyval;
                        dp[j].p=dp[j-bag[i].rnval].p+1;
                    }
                    else  dp[j]=dp[j];
                }
               // cout<<dp[j]<<endl;

            }
            //cout<<endl;
        }
        sort(dp+1,dp+jy+1,bmp2);
        for (int i = 1; i <= jy; i++) {
         //   cout<<dp[i].dp<<" "<<dp[i].p<<endl;
                if(dp[i].dp>=jy&&dp[i].p<=n&&is_out==0){
                    cout<<rn-dp[i].p<<endl;
                    is_out=1;
                }
        }
        if(is_out==0) cout<<"-1"<<endl;
        /*
        cout<<"max="<<dp[rn]<<endl;
        cout<<p[jy]<<endl;
         */
    }
    return 0;
}

 

#include <bits/stdc++.h>
using namespace std;
const int N = 10000;
int n;
unsigned long long res=0;
struct Bag{
    int rnval;
    int jyval;
    int weight;
}bag[N];
bool bmp(Bag a,Bag b){
    if(a.rnval<b.rnval){
        return a.jyval<b.jyval;
    }
    if(a.rnval==b.rnval) return a.jyval>b.jyval;
}
struct Dp{
    int dp,p;
}dp[N];
bool bmp2(Dp a, Dp b){
    return a.p<b.p;
}
bool is_out;
int kind,rn,jy,p[N];
int main(){
    ios::sync_with_stdio(false);
    while(cin>>jy>>rn>>kind>>n){
        for (int i = 1; i <= 1000; i++) {
            dp[i].dp=0;
            dp[i].p=0;
        }
        is_out=0;
        for (int i = 1; i <= kind; i++) {
            cin>>bag[i].jyval>>bag[i].rnval;
        }
        sort(bag+1,bag+kind+1,bmp);
        // for (int i = 1; i <= kind; i++) cout<<bag[i].jyval<<bag[i].rnval<<endl;
        for (int i = 1; i <= jy; i++) {
            for (int j = bag[i].rnval;j<=rn;j++) {
                //  cout<<dp[j-bag[i].rnval].dp+bag[i].jyval<<" ";
                if(dp[j].dp>=jy) dp[j]=dp[j];
                else{
                    if(dp[j-bag[i].rnval].dp+bag[i].jyval>dp[j].dp){
                        dp[j].dp=dp[j-bag[i].rnval].dp+bag[i].jyval;
                        dp[j].p=dp[j-bag[i].rnval].p+1;
                    }
                    else  dp[j]=dp[j];
                }
                // cout<<dp[j]<<endl;

            }
            //cout<<endl;
        }
        sort(dp+1,dp+jy+1,bmp2);
        for (int i = 1; i <= jy; i++) {
           // cout<<dp[i].dp<<" "<<dp[i].p<<endl;
            if(dp[i].dp>=jy&&dp[i].p<=n&&is_out==0){
                cout<<rn-dp[i].p<<endl;
                is_out=1;
            }
        }
        if(is_out==0) cout<<"-1"<<endl;
        /*

        cout<<"max="<<dp[rn]<<endl;
        cout<<p[jy]<<endl;
         */
    }


    return 0;
}

 

posted @ 2021-04-24 15:54  limited_Infinite  阅读(47)  评论(0编辑  收藏  举报
// //返回顶部 //返回顶部按钮