萌新求助
查看原帖
萌新求助
85593
dying楼主2021/8/3 00:29

自以为学了几年OI,没想到橙题都不会

80pts,WA#5

code:(没删freopen)

#include<bits/stdc++.h>
#define int long long
using namespace std;
#define getchar() (read.getc())
#define putchar(c) (print.putc(c))
#define puts(s) MYPUTS(s)
struct in{
    in(){freopen("_in.txt","r",stdin);}
    char buf[1<<20],*p1,*p2;
    inline char getc(){return (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++);}
    int operator()(){
        int x=0,f=1;char ch=getc();
	    while (!isdigit(ch)&&ch!=EOF){if(ch=='-')f=-1;ch=getc();}
	    while (isdigit(ch)){x=x*10+ch-48;ch=getc();}
    	return x*f;
    }
}read;
struct out{
    char buf[1<<20],*p,*end;
    out(){freopen("_out.txt","w",stdout),p=buf;end=buf+(1<<20);}
    inline void putc(char c){if(p==end)fwrite(buf,1,1<<20,stdout),p=buf;*p++=c;}
    void operator()(int a){
    	if(a<0)putc('-'),a=-a;
        if(a>=10)(*this)(a/10);
        putc(a%10^48);
    }
    ~out(){fwrite(buf,1,p-buf,stdout);}
}print;
inline void MYPUTS(const char*str){for(int i=0;str[i];i++)putchar(str[i]);putchar('\n');}

int m=read(),n=read();

int h[1010],e[1010],ne[1010],idx;
void add(int a,int b){
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}

int weight[1010],value[1010];
int*dp=new int[2010];

signed main(){
    memset(dp,0xee,8040),dp+=1005;
    memset(h,-1,sizeof(h)),memset(dp,0,8040);
    for(int i=1;i<=n;i++){
        weight[i]=read(),value[i]=read();
        add(read(),i);
    }
    for(int i=1;~h[i];i++)
        for(int j=m;~j;j--)
            for(int k=h[i];~k;k=ne[k])
                dp[j]=max(dp[j-weight[e[k]]]+value[e[k]],dp[j]);
    print(dp[m]);
    return ~EOF;
}
2021/8/3 00:29
加载中...