POJ 3265 DP

cow每个月月末可以得到m钱,,一共有n个问题需要解决

如果解决某个问题,必须在第i月支付定金,并在i+1月支付尾款,需按顺序解决问题,每个月的金钱只能在下个月使用,不能累加

f[i][j]表示在第i个月解决前j个问题所能剩下的最多的钱数

#include "stdio.h"#include "string.h"int dp[2010][310];int Max(int a,int b){if (a<b) return b;else return a;}int main(){int i,j,ans,m,n,a,b;int suma[310],sumb[310];while (scanf("%d%d",&m,&n)!=EOF){memset(suma,0,sizeof(suma));memset(sumb,0,sizeof(sumb));for (i=1;i<=n;i++){scanf("%d%d",&a,&b);suma[i]=suma[i-1]+a;sumb[i]=sumb[i-1]+b;}ans=0;memset(dp,-1,sizeof(dp));dp[1][0]=m;while (1){ans++;for (i=1;i<=n;i++)for (j=i;j>=0;j–){if (dp[ans-1][j]>=suma[i]-suma[j] && m>=sumb[i]-sumb[j])dp[ans][i]=Max(dp[ans][i],m-sumb[i]+sumb[j]);if (dp[ans][i]==m) break;}if (dp[ans][n]>=0) break;}printf("%d\n",ans+1);}return 0;}

流过泪的眼睛更明亮,滴过血的心灵更坚强!

POJ 3265 DP

相关文章:

你感兴趣的文章:

标签云: