HDU4883
2015-12-29 23:02
190 查看
http://acm.hdu.edu.cn/showproblem.php?pid=4883
这道题还是想的不够仔细
这个代码写错了 一开始的理解就是桌子不是通用的 (感觉像贪心工程时间一样)
后来才发现 前一桌人走了 后面的人可以再坐上来 于是我这个代码错的很正常了
还是觉得自己不适合BC这些题目 太需要思考了 而我经常看题解 以至于自己进步不大
以后多做BC还是希望自己能自己思考
这道题还是想的不够仔细
[code]#include<cstdio> #include<algorithm> using namespace std; const int inf=0x3f3f3f3f; typedef long long ll; struct note { ll start,aim,num; }a[10001]; ll cmp(note aa,note bb) { if(aa.aim!=bb.aim) return (aa.aim<bb.aim); else return aa.start>bb.start; } int main() { ll T; //freopen("test1.txt","r",stdin); scanf("%lld",&T); while(T--) { ll n,nums=0; scanf("%lld",&n); ll x,y; for(ll k=1;k<=n;k++) { scanf("%d",&a[k].num); ///prllf("%d\n",a[k].num); scanf("%2lld:%2lld",&x,&y); a[k].start=x*60+y; scanf("%2lld:%2lld",&x,&y); ///prllf("%d %d\n",x,y); a[k].aim=x*60+y; //prllf("%d %d\n",a[k].start,a[k].aim); } sort(a+1,a+n+1,cmp); //prllf("%d %d\n",a[1].aim,a[2].aim); if(n==1){ printf("%lld\n",a[1].num); continue; } ll ans=0,time=a .start,can=a .num; for(ll i=n-1;i>=1;i--) { //prllf("%d %d %d\n",time,i,a[i].aim); if(a[i].aim<=time){ can=max(can,a[i].num); } else{ ans+=a[i].num; } time=a[i].start; } ///prllf("%d\n",can); ans+=can; printf("%lld\n",ans); } return 0; }
这个代码写错了 一开始的理解就是桌子不是通用的 (感觉像贪心工程时间一样)
后来才发现 前一桌人走了 后面的人可以再坐上来 于是我这个代码错的很正常了
[code]#include<cstdio> #include<algorithm> #include<iostream> #include<cstring> using namespace std; const int inf=0x3f3f3f3f; const int MAX_=2001; int a[MAX_]; bool used[MAX_]; char t; int k; inline void scanf_(int &data) { char ch = getchar(); while (ch < '0' || ch > '9') ch = getchar(); data = 0; do { data = data*10 + ch-'0'; ch = getchar(); } while (ch >= '0' && ch <= '9'); } /*** //inline void scanf_(int & data){ // data=0; // while(true) // { // t=getchar(); // if(t>='0'&&t<='9'){ // goto loop; // } // } // while(true) // { // t=getchar(); // if(t>='0'&&t<='9'){ // loop: // data=(data*10+(t-'0')); // } // else break; // } //} */ int main() { int T,x,y,num,ans,n,t1,t2; cin>>T; while(T--) { scanf("%d",&n); memset(a,0,sizeof(a)); memset(used,false,sizeof(used)); ans=0; for(int i=1; i<=n; i++) { scanf_(num); scanf_(x); scanf_(y); ///事实证明我自己YY的输入外挂和 ///scanf ///一个效率 ///scanf("%d%d:%d",&num,&x,&y); /// cout<<x<<" "<<y<<endl; t1=x*60+y; ///scanf("%d:%d",&x,&y); scanf_(x); scanf_(y); t2=x*60+y; ///if(!used[t1])a[t1]+=num; ///if(!used[t2])a[t2]+=num; ///我的理解又错了 我以为首尾标记一下 ///如果被标记了 就说明前一桌子人刚走 就不用再加上 ///因为题目说了这是不用加的 ///我又看了题解 ///才知道 这不过就是等价成你晚一分钟在吃就行了 for(int j=t1+1; j<=t2; j++) { a[j]+=num; ///ans=max(ans,a[j]); ///还有这 很费时间 每次更新 都 MAX一遍 } ///used[t2]=true; } for(int i=0; i<=2000; i++) ans=max(ans,a[i]); printf("%d\n",ans); } return 0; }
还是觉得自己不适合BC这些题目 太需要思考了 而我经常看题解 以至于自己进步不大
以后多做BC还是希望自己能自己思考
相关文章推荐
- CSS如何设置div半透明效果
- MySQL的慢查询日志
- Rendering
- 动态规划之01背包
- [leetcode 167] Two Sum II - Input array is sorted
- HTML5 文件API(一)
- s5pv210中断体系
- Day-8 晚上。
- jinja2 字符串替换
- 浅谈innoDB,MYISAM
- python - StringIO文本缓冲
- 在Linux环境下安装部署MySQL数据库系统实例
- MongoDB 驱动以及分布式集群读取优先级设置
- 打开族,加载族
- de4dot3.14更新文件打包下载
- 2016年最值得关注的16个网页设计趋势
- Java网络连接之HttpURLConnection与HttpClient 区别及联系
- centos 安装qrcode 二维码
- VB 生成的EXE怎么更换桌面图标
- Open Source Software