Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
比dijkstra慢,但更容易写的DP解法#include <iostream> using namespace std; #define MAX 9999999 int M,N,mMin; int F[101]; //序号为i的物品的最小花费 int P[101];//序号为i的物品的价格 int L[101]; //序号为i的物品 的地位 int X[101][20000];//X[i][0]为物品i的可交换物品数目,X[i][k]为可交换物品的序号,X[i][k]为可交换物品的价格 int main() { while(scanf("%d",&M)!=EOF) { mMin=MAX; scanf("%d",&N); for(int j=1;j<=N;j++) { scanf("%d %d %d",&P[j],&L[j],&X[j][0]); for(int k=1;k<=X[j][0]*2;k+=2) { scanf("%d %d",&X[j][k],&X[j][k+1]); } } for(int t=L[1]-M;t<=L[1];t++) { memset(F,MAX,sizeof(int)*101); for(int j=N;j>=1;j--) { if(L[j]>t+M||L[j]<t) //过滤人物 continue; F[j]=P[j]; for(int k=1;k<=X[j][0]*2;k+=2) { F[j]=min(F[j],F[X[j][k]]+X[j][k+1]);//DP } } if(mMin>F[1]) mMin=F[1]; } printf("%d\n",mMin); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator