水题#include<cstdio> #include<cstdlib> #include<cstring> #include<set> #include<algorithm> #include<map> #include<vector> #include<queue> #include<iostream> #include<string> #include<cmath> #define N 100010 #define FOR(i,a,b) for(i=(a);i<=(b);i++) #define ROF(i,a,b) for(i=(a);i>=(b);i--) typedef long long LL; using namespace std; int dp[N]; int main() { int n,i,p,t,x; scanf("%d",&n); int ans=0; FOR(i,1,n) { scanf("%d %d",&p,&t); dp[p]=0; for (scanf("%d",&x);x>0;scanf("%d",&x)) dp[p]=max(dp[p],dp[x]); dp[p]+=t;
Views:
328
|
Added by:
dhy0077
|
Date:
09.29.2013
|
想出来了…… dp[i][j]表示修前i个路面,最大/最小的值是a[j]的最小花费正反做两遍Code:#include<cstdio> #include<cstdlib> #include<cstring> #include<set> #include<algorithm> #include<map> #include<vector> #include<queue> #include<iostream> #include<string> #include<cmath> #define FOR(i,a,b) for(i=(a);i<=(b);i++) #define ROF(i,a,b) for(i=(a);i>=(b);i--) #define INF 2147000000 #define N 2010 typedef long long LL; using namespace std; int a[N],f[N][N],b[N]; int main() { int n,i,j; scanf("%d",&n); FOR(i,1,n) {scanf("%d",&a[i]);b[i]=a[i];} sort(b+1,b+1+n); FOR(i,0,n) f[i][0]=INF; FOR(i,1,n) FOR(j,1,n) f[i][j]=min(f[i][j-1
...
Read more »
Views:
474
|
Added by:
dhy0077
|
Date:
09.29.2013
|
搬运问题及相对位移#include<cstdio> #include<cstdlib> #include<cstring> #include<set> #include<algorithm> #include<map> #include<vector> #include<queue> #include<iostream> #include<string> #include<cmath> #define N 100010 #define FOR(i,a,b) for(i=(a);i<=(b);i++) #define ROF(i,a,b) for(i=(a);i>=(b);i--) typedef long long LL; using namespace std; int x[N],y[N]; int main() { int n,i; scanf("%d",&n); FOR(i,1,n) scanf("%d %d",&x[i],&y[i]); sort(y+1,y+1+n); int p=n/2+1; int ans=0; FOR(i,1,n) ans+=abs(y[i]-y[p]); sort(x+1,x+1+n); FOR(i,1,n) x[i]-=i-1;
Views:
347
|
Added by:
dhy0077
|
Date:
09.29.2013
|
指针法#include<cstdio> #include<cstdlib> #include<cstring> #include<set> #include<algorithm> #include<map> #include<vector> #include<queue> #include<iostream> #include<string> #include<cmath> #define N 100010 #define FOR(i,a,b) for(i=(a);i<=(b);i++) #define ROF(i,a,b) for(i=(a);i>=(b);i--) typedef long long LL; using namespace std; int a[N],b[N],c[N]; int main() { int n,m,i,j; scanf("%d %d",&n,&m); LL sum=0;int len=0,tot=0; FOR(i,1,n) scanf("%d",&a[i]); FOR(i,1,m) scanf("%d",&b[i]); sort(a+1,a+1+n);sort(b+1,b+1+m); i=1,j=0;
Views:
340
|
Added by:
dhy0077
|
Date:
09.29.2013
|
Views:
360
|
Added by:
dhy0077
|
Date:
09.29.2013
|
二进制拆包#include<cstdio> #include<cstdlib> #include<cstring> #include<set> #include<algorithm> #include<map> #include<vector> #include<queue> #include<iostream> #include<string> #define FOR(i,a,b) for(i=(a);i<=(b);i++) #define ROF(i,a,b) for(i=(a);i>=(b);i--) #define N 1000010 #define M 30010 typedef long long LL; using namespace std; int W[N],P[N]; int dp[M]; int main() { int n,T,i,m,t,p,j; scanf("%d %d",&n,&T); int len=0,sum=0; FOR(i,1,n) { scanf("%d %d %d",&m,&t,&p); sum+=m*p;
Views:
280
|
Added by:
dhy0077
|
Date:
09.29.2013
| |