CSP-J 2019游记+题解


游记区

11月15日

  • 上午
    编程集训,复习DP等各大专题
  • 下午
    前往日照,5:00p.m.到达
    发现没带身份证——卒×1
    托朋友带来
  • 晚上
    CSP2019疯狂备战

11月16日

  • 上午
    享用酒店自助餐,前往山东外国语大学集合
  • 下午
    在学校里凌乱
    2:00左右进入考场
    T1:这太TM 水了—— 这道题实在是太难了,迫不得已,我必须打暴力了
    T2:依然好水啊…… 等等,这题不优化会TLE啊!QAQ幸好我想到了
    But:
    开了一个free——卒×2
    开了一个time——卒×3
    ButBut————实测并没有卒
    T3:停?dp吗?转移方程不会啊!T=1?骗分输出m。n=1?n=1就是傻子dp™一个
    T4:DFS牛逼!!!
  • 晚上
    赶夜路回家

游记结束
题解开始
T1:还要解释吗……

#include<cstdio>
using namespace std;
int ans,t;
int main(){
    freopen("number.in","r",stdin);
    freopen("number.out","w",stdout);
    for(int i=0;i<8;i++){
        t=getchar();
        if(t=='1')ans++;
    }
    printf("%d",ans);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

T2:不优化的代码luogu45分

#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int read(){
    int t=getchar(),n=0,x=-1;
    if(t-'-')n=t-'0',x=1;
    while(1){t=getchar();if((t-8)/10-4)break;n=n*10+t-'0';}
    return n*x;
}
struct f_t{
    int t,p;
}f_[100005];
int n,type,price,t_,top,ans;
bool flag;
int main(){
    freopen("transfer.in","r",stdin);
    freopen("transfer.out","w",stdout);
    n=read();
    for(int i=0;i<n;i++){
        type=read(),price=read(),t_=read();
        if(!type){
            f_[top].p=price,f_[top].t=t_;
            top++,ans+=price;
        }
        else{
            flag=1;
            for(int i=0;i<top;i++){
                if(f_[i].t>=t_-45&&f_[i].p>=price){
                    f_[i].p=-1;
                    flag=0;
                    break;
                }
            }
            if(flag)ans+=price;
        }
    }
    printf("%d",ans);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

优化 超时的不算 后的100分

#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int read(){
    int t=getchar(),n=0,x=-1;
    if(t-'-')n=t-'0',x=1;
    while(1){t=getchar();if((t-8)/10-4)break;n=n*10+t-'0';}
    return n*x;
}
struct f_t{
    int t,p;
}f_[100005];
int n,type,price,t_,top,les,ans;
bool flag;
int main(){
    freopen("transfer.in","r",stdin);
    freopen("transfer.out","w",stdout);
    n=read();
    for(int i=0;i<n;i++){
        type=read(),price=read(),t_=read();
        if(!type){
            f_[top].p=price,f_[top].t=t_;
            top++,ans+=price;
        }
        else{
            flag=1;
            for(int i=les;i<top;i++){
                if(f_[les].t<t_-45)les++;
                if(f_[i].t>=t_-45&&f_[i].p>=price){
                    f_[i].p=-1;
                    flag=0;
                    break;
                }
            }
            if(flag)ans+=price;
        }
    }
    printf("%d",ans);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

T3:QAQ本蒟蒻连个完全背包都打不出来了
把今天手里的钱当做背包的容量
把商品今天的价格当成它的消耗
把商品明天的价格当做它的价值

#include<cstdio>
#include<algorithm>
#include<cstring> 
using namespace std;
int t,n,m,dp[10010],p[105][105],pro;
int read(){
    int t=getchar(),n=0,x=-1;
    if(t-'-')n=t-'0',x=1;
    while(1){t=getchar();if((t-8)/10-4)break;n=n*10+t-'0';}
    return n*x;
}
int main(){
    freopen(".in","r",stdin)
    freopen(".out","w",stdout)
    t=read(),n=read(),m=read();
    for(int i=0;i<t;i++)
        for(int j=0;j<n;j++)
            p[i][j]=read();
    pro=m;
    for(int i=0;i<t-1;i++){
        memset(dp,0,sizeof(dp));
        for(int j=1;j<=pro;j++)dp[j]=j;
        for(int j=0;j<n;j++)
            for(int k=p[i][j];k<=pro;k++)
                dp[k]=max(dp[k],dp[k-p[i][j]]+p[i+1][j]);
        for(int j=1;j<=pro;j++)dp[j]=max(dp[j-1],dp[j]);
        pro=dp[pro];
    }
    printf("%d",pro);
    fclose(stdin);
    fclose(stdout);
    return 0;
}
发布了12 篇原创文章 · 获赞 14 · 访问量 570

猜你喜欢

转载自blog.csdn.net/Wonderful_Answer/article/details/103222838