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 |
Re:好简单的dp,说下思路In Reply To:好简单的dp,说下思路 Posted by:zhch12121 at 2009-02-26 11:43:21 > 上面有人说过,但那个状态转移也太复杂了吧,我的方程只有一个 > f[i] = min{f[k] + (a[k+1] + a[k+2] ... +a[i] + 10) * p[i]; > a[i]表示第i个class要买的数目 > p[i]表示第i个class的单个价格 > f[i]表示买到第i个时付的最少的钱(第i个一定要买) > 附上代码 > #include<iostream> > #include<algorithm> > using namespace std; > int n_case; > int n_class; > int p[101]; > int n[101]; > int f[101]; > int main() > { > cin >> n_case; > while(n_case--) > { > cin >> n_class; > for(int i = 1; i <= n_class; ++i) > { > cin >> n[i] >> p[i]; > } > f[0] = 0; > for(int i = 1; i <= n_class; ++i) > { > int minn = 1000000000; > int cnt = n[i]; > for(int k = i - 1; k >= 0; k--) > { > minn = min(minn, f[k] + (cnt + 10) * p[i]); > cnt += n[k]; > } > f[i] = minn; > } > cout << f[n_class] << endl; > } > } > 虽然ac了,但感觉需要证明一下后面为什么是连续的,不知道是正确的还是数据弱 Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator