15 条题解
-
0yyysann LV 7 @ 2016-08-22 16:56:00
#include<iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <ctime> #include <cctype> #include <climits> #include <algorithm> #include <map> #include <queue> #include <vector> #include <string> #include <cstring> #include <sstream> #include <fstream> using namespace std; const int INF=66666666; struct node { int start,end; } car[305][305]; int n,m; int dp[55][33000]={0}; int num[305]={0}; int change(int time) { int h,m,s; h=time/10000; time-=h*10000; h-=6; m=time/100; time-=m*100; s=time; return (h*3600+m*60+s); } int changeBack(int T) { int h,m,s; h=T/3600; T-=h*3600; h+=6; m=T/60; T-=m*60; s=T; return h*10000+m*100+s; } int main() { scanf("%d %d",&n,&m); int n600=n*600; int ni,Ti,ti; memset(dp,50,sizeof(dp)); for(int i=0; i<m; i++) { scanf("%d %d %d",&ni,&Ti,&ti); ni--; Ti=change(Ti); car[ni][num[ni]].start=Ti; car[ni][num[ni]].end=ti+Ti; num[ni]++;//ni个站点出发有几辆车 } dp[0][0]=0; n--; bool b=false; for(int i=0; i<n; i++) { for(int j=i*300,i600=i*600; j<=i600; j++) { for(int k=300; k<=600; k++) { int times=0,jk=j+k; for(int p=0; p<num[i]; p++) { if((car[i][p].start>=j&&car[i][p].end>jk)||(car[i][p].start<=j&&car[i][p].end<jk)) continue;//没有超车 else times++;//超车或同时到达 } dp[i+1][jk]=min(dp[i+1][jk],dp[i][j]+times); if (dp[i+1][jk]==0) { for (int p=jk+1,i602=i600+600;p<=i602;p++) { dp[i+1][p]=0; } b=true; break; } } if (b) break; } if (b) { b=false; continue; } } int result=INF; int minTime; for(int i=n*300,n601=n600-600; i<=n601; i++) { if(result>dp[n][i]) { result=dp[n][i]; minTime=i; } } int printTime=changeBack(minTime); printf("%d\n",result); if (printTime<100000) printf("0"); printf("%d\n",printTime); return 0; }
-
02012-09-06 20:06:51@
貌似是黑书上的例题啊 暂时不会 先放放。。
-
02009-10-09 20:17:45@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 212ms
├ 测试数据 05:答案正确... 197ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 25ms
├ 测试数据 09:答案正确... 150ms
├ 测试数据 10:答案正确... 369ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:953ms
sunny 惹得祸 -
02009-10-08 16:04:06@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 40ms
├ 测试数据 04:答案正确... 415ms
├ 测试数据 05:答案正确... 352ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 25ms
├ 测试数据 08:答案正确... 87ms
├ 测试数据 09:答案正确... 259ms
├ 测试数据 10:答案正确... 602ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:1780msdragon
常数优化下 终于过了
-
02009-10-04 09:37:44@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 56ms
├ 测试数据 04:答案正确... 56ms
├ 测试数据 05:答案正确... 56ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 119ms
├ 测试数据 10:答案正确... 197ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:484msBS一下 VIJOS 201不报错
害了我半个早上 -
02009-09-12 10:53:35@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 25ms
├ 测试数据 05:答案正确... 9ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 9ms
├ 测试数据 10:答案正确... 72ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:115ms
时间转错了,纠结了半天 -
02009-01-08 23:45:37@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms就是加一个剪枝,如果d[i][t]==0,那么所有di][k\都付成0,不必再计算
-
02008-12-08 12:33:55@
终于AC了,纪念一下。
-
02008-10-22 17:04:56@
黑书上原题...
-
02008-10-13 10:54:21@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 9ms
├ 测试数据 04:答案正确... 9ms
├ 测试数据 05:答案正确... 9ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 41ms
├ 测试数据 10:答案正确... 150ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:218ms终于AC了。。。
其实,没必要用lrj那个方法。。。
只用每次定一个界限,然后如果f=0直接break掉就行了(0是答案的下限) -
02008-10-09 11:53:33@
照着黑书上写
然后优化优化常数
就过了
最慢的点700+s
不知道下面那个RMQ怎么做的......
注意"假设所有车辆到达关口的时刻都是整秒" -
02007-11-12 08:10:32@
第一问是逆序对吧?
-
02007-09-29 18:27:22@
贪心算法+动态规划+分支定界
-
02006-11-12 14:27:59@
这题写得……真是天昏地暗
一开始就想到了lrj书上写的办法,对于最大数据5s
然后剪枝,对于某个值如果算到0就不再继续算,此时对于最大数据4.5s
然后……想到用RMQ,写了个Sparse Table,终于ac……
托puppy的福,最大数据只用了197ms……puppy强啊 -
02006-07-27 16:18:26@
dp
令c[x,t]表示在时刻t到达第x个关口最少与巡逻车相遇的次数
c[x,t]:=min(c[x-1,t-10*k],+f(x-1,t-10*k,t)) (30
- 1