您的位置:首页 > 其它

POJ 1260.Pearls

2017-11-27 18:27 246 查看
题目:http://poj.org/problem?id=1260

AC代码(C++):

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <queue>
#include <math.h>
#include <string>
#include <string.h>
#include <bitset>

#define INF 0xfffffff
#define MAXN 100105

using namespace std;

int n;
int a[105],p[105],sum[105];
int dp[105];

int main(){
int t;
cin>>t;
while(t--){
cin>>n;
sum[0] = 0;
for(int i = 1; i <= n; i++){
scanf("%d %d",&a[i],&p[i]);
sum[i] = sum[i-1] + a[i];
}
dp[0] = 0;
for(int i = 1; i <= n; i++){
dp[i] = dp[i-1] + (a[i]+10)*p[i];
for(int j = 0; j < i; j++){
dp[i] = min(dp[i],dp[j] + (sum[i]-sum[j]+10)*p[i]);
}
}
cout<<dp[n]<<endl;
}
}

总结: 动态规划. 刚开始的想法是从后面往前算, 可是一直WA. 后来想了下如果从后面往前, 设i>j>k, 可能出现第j组珍珠以第i组的价格购买, 但是如果第k组珍珠和第j组一起以第j组的价格购买的话更便宜, 则会把这种情况忽略掉. 改成从前往后更新就AC了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: