Codeforces Beta Round #90, problem: (C) Education Reform DP
来源:互联网 发布:农村淘宝客服电话 编辑:程序博客网 时间:2024/05/22 11:21
做法:反正a,b之间只有100的长度,之间DP即可啊。
可是,可是一开始dp数组开成了char,WA到死。
#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <utility>#include <vector>#define LL long long#define it set<LL>::iteratorconst int LMT=55;using namespace std;struct cricu{ LL a,b; int tag,c; bool operator<(const cricu &x)const { return c<x.c; }}cri[LMT];struct line{ bool wid[LMT<<1]; int len;}dp[LMT][LMT];pair<int,int> pre[LMT][LMT][LMT<<1];pair<int,LL>ans;LL k,sum[LMT][LMT][LMT<<1];int can[LMT];vector<pair<int,LL> >vec;int n,m;int main(){ int p=0; LL have=0; int d; ans=make_pair(-1,0); cin>>n>>m>>k; for(int i=1;i<=m;i++) { cin>>cri[i].a>>cri[i].b>>cri[i].c; cri[i].tag=i; } sort(cri+1,cri+1+m); for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) dp[i][j].len=(int)(cri[i].b-cri[i].a+1); for(int j=0;j<dp[i][1].len;j++) dp[i][1].wid[j]=1; for(int j=0;j<dp[i][1].len;j++) sum[i][1][j]=cri[i].a+j; } for(int i=1;i<=m;i++) { if(p<n&&(i==1||cri[i].c>cri[i-1].c))p++; can[i]=p; for(int j=2;j<=can[i];j++) for(int ii=i-1;can[ii]>=j-1&&ii>0;ii--) { if(cri[ii].c<cri[i].c) for(int t=0;t<dp[ii][j-1].len;t++) if(dp[ii][j-1].wid[t]) { if((cri[ii].a+t)+k>=cri[i].a&&cri[ii].a+t+k<=cri[i].b) { d=(int)((cri[ii].a+t)+k-cri[i].a); dp[i][j].wid[d]|=1; if(sum[i][j][d]<sum[ii][j-1][t]+(cri[ii].a+t)+k) { sum[i][j][d]=sum[ii][j-1][t]+(cri[ii].a+t)+k; pre[i][j][d].first=ii; pre[i][j][d].second=t; } } if((cri[ii].a+t)*k>=cri[i].a&&(cri[ii].a+t)*k<=cri[i].b) { d=(int)((cri[ii].a+t)*k-cri[i].a); dp[i][j].wid[d]|=1; if(sum[i][j][d]<sum[ii][j-1][t]+(cri[ii].a+t)*k) { sum[i][j][d]=sum[ii][j-1][t]+(cri[ii].a+t)*k; pre[i][j][d].first=ii; pre[i][j][d].second=t; } } } } for(int t=dp[i][n].len-1;t>=0;t--) if(dp[i][n].wid[t]) { if(have<sum[i][n][t]) { have=sum[i][n][t]; ans.second=t; ans.first=i; } } } if(ans.first==-1)printf("NO\n"); else { int have=n; pair<int,LL> x=ans; printf("YES\n"); while(have) { vec.push_back(make_pair(x.first,x.second+cri[x.first].a)); x=pre[x.first][have][x.second]; have--; } while(!vec.empty()) { cout<<cri[vec.back().first].tag<<" "<<vec.back().second<<endl; vec.pop_back(); } } return 0;}
- Codeforces Beta Round #90, problem: (C) Education Reform DP
- Codeforces Beta Round #90 C. Education Reform
- codeforces 119C Education Reform (dp+路径打印)
- Codeforces 119C Education Reform【dp+路径输出】
- Codeforces Beta Round #13, problem: (C) Sequence DP
- Codeforces Beta Round #2 C. Commentator problem
- Codeforces Beta Round #17 C. Balance DP
- Codeforces Beta Round #71 C【KMP+DP】
- Codeforces Beta Round #17 C. Balance DP
- Codeforces Beta Round #69 (Div. 1 Only), problem: (C) Beavermuncher-0xFF 树形DP+优先队列
- Codeforces Beta Round #50, problem: (C) First Digit Law 数位DP
- Codeforces Beta Round #35 (Div. 2), problem: (D) Animals DP
- Codeforces Beta Round #2 2C Commentator problem(模拟退火)
- Codeforces Beta Round #90 C题
- Codeforces Beta Round #17 C. Balance (字符串计数 dp)
- Codeforces Beta Round #96 (Div. 1) C. Logo Turtle (DP)
- Codeforces Beta Round #11, problem: (D) A Simple Task 状态压缩DP+记忆化搜素DP
- Codeforces Beta Round #79 (Div. 1 Only), problem: (B) Buses 路径DP
- NUC140之ADC
- poj 1013 Counterfeit Dollar
- Python 正则表达式 Howto(4)
- 远程开机
- 个人的收藏夹
- Codeforces Beta Round #90, problem: (C) Education Reform DP
- Java正则表达式校验邮箱和手机号
- UVa 10891 Game of Sum
- 尝试VC控制外部程序
- ARM嵌入式笔记1
- 卷积物理意义 几何意义
- 我对linux理解之tty二
- 我所热衷的编程生涯 连载(3)
- ILMerge.Merge.ERROR!!: