//11148292 c00h00g 1260 Accepted 388K 0MS G++ 751B 2012-12-30 12:49:31 证明在这里:http://liangsun.org/posts/poj-1260-pearls-report/
//仔细体会一下,还是和龟兔赛跑那道题目有些相似
//dp[i]表示购买前i种珠宝所需要的最小花费
//dp[i]=min(dp[i],dp[j]+(ai[j+1]+ai[j+2]+...+ai[i]+10)*pi[i]); 0<=j<i
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int n,c;
int ai[105];//数量
int pi[105];//价值
int dp[105];
int main(){
scanf("%d",&n);
while(n--){
for(int i=0;i<105;i++)
dp[i]=99999999;
dp[0]=0;
scanf("%d",&c);
for(int i=1;i<=c;i++){
scanf("%d%d",&ai[i],&pi[i]);
}
int sum;
for(int i=1;i<=c;i++){
for(int j=0;j<i;j++){
sum=0;
for(int k=j+1;k<=i;k++){
sum+=pi[i]*ai[k];
}
sum+=10*pi[i];
dp[i]=min(dp[i],sum+dp[j]);
}
}
printf("%d\n",dp[c]);
}
return 0;
}
POJ 1260 dp
最新推荐文章于 2017-04-13 23:21:16 发布