| ||||||||||
| 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 | |||||||||
方程是对的,我用下面的代码AC了In Reply To:感觉方程好像不是这样的呢 Posted by:frkstyc at 2005-07-10 23:33:18 //用~划出了增加的代码
//#include <stdio.h>
#include<iostream>
//#include<fstream>
using namespace std;
int f[102][201],i,j,k,d,dis[102],sta[102],pri[102],n,inf = 1000000000,tmp;
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out2.txt","w",stdout);
// scanf("%d",&d);
// ifstream cin("in.txt");
// ofstream cout("out2.txt");
cin>>d;
n = 1;
while(cin>>sta[n]>>pri[n] && sta[n]<=d)
~~~~~~~~~
n++;
sta[n] = d;
sta[0] = 0;
for(i=1; i<=n; i++)
{
dis[i]=sta[i]-sta[i-1];
if(dis[i]>200 || (i==1||i==n)&&dis[i]>100 || n==1 && dis[i]>0)
~~~~~~~~~~~~~~~~~~~
{
cout<<"Impossible"<<endl;
return 0;
}
for(j=0; j<=200; j++)
{
f[i][j] = inf;
}
}
f[1][100-sta[1]] = 0;
for(i=1; i<n; i++)
{
for(j=0; j<=200; j++)
{
if(f[i][j]!=inf)
{
for(k=0; k<=200-j; k++)
{
if(j+k>=dis[i+1] && f[i][j]+k*pri[i]<f[i+1][j+k-dis[i+1]])
{
f[i+1][j+k-dis[i+1]] = f[i][j]+k*pri[i];
}
}
}
}
}
cout<<f[n][100]<<endl;
// printf("%d\n",f[n][100]);
// cin.close();
// cout.close();
// fclose(stdin);
// fclose(stdout);
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator