UVa 10154 Weights and Measures DP
2014-07-25 21:20
411 查看
初始化DP数组各种WA,比人的初始memset(0x7f) 然后判断就直接<(1<<30)实在看不出有啥道理。
我自己开始是INT_MAX;然后后来判断就直接<INT_MAX.就各种WA了。
后来看下感觉这里递推时会加爆INT所以WA?所以要判断以前前面的状态是否存在,就DP[I-1][J-1]!=INT_MAX;
for (int i=1;i<=cas;i++)
for (int j=1;j<=i;j++)
{
dp[i][j]=min(dp[i][j],dp[i-1][j]);
if (dp[i-1][j-1]!=INT_MAX &&dp[i-1][j-1]+src[i].weight<=src[i].power )
dp[i][j]=min(dp[i][j],dp[i-1][j-1]+src[i].weight);
}
按照力量有小至大排序,dp[i][j]表示前i个乌龟中选j个乌龟的最小重量。
我自己开始是INT_MAX;然后后来判断就直接<INT_MAX.就各种WA了。
后来看下感觉这里递推时会加爆INT所以WA?所以要判断以前前面的状态是否存在,就DP[I-1][J-1]!=INT_MAX;
for (int i=1;i<=cas;i++)
for (int j=1;j<=i;j++)
{
dp[i][j]=min(dp[i][j],dp[i-1][j]);
if (dp[i-1][j-1]!=INT_MAX &&dp[i-1][j-1]+src[i].weight<=src[i].power )
dp[i][j]=min(dp[i][j],dp[i-1][j-1]+src[i].weight);
}
按照力量有小至大排序,dp[i][j]表示前i个乌龟中选j个乌龟的最小重量。
#include <map> #include <set> #include <list> #include <cmath> #include<cctype> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cstdio> #include <string> #include <vector> #include<climits> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #define LL long long #define PI 3.1415926535897932626 using namespace std; int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);} #define MAXN 5700 struct node { int weight,power; friend bool operator < (const node &a,const node &b) { if (a.power==b.power) return a.weight<b.weight; return a.power<b.power; } }src[MAXN]; int dp[MAXN][MAXN]; int Max,cas; int main() { //freopen("sample.txt","r",stdin); cas=1; int a,b; while (scanf("%d%d",&a,&b)!=EOF) { src[cas].weight=a; src[cas].power=b; cas++; } cas--; sort(src+1,src+1+cas); //for (int i=1;i<=cas;i++) printf("%d %d\n",src[i].power,src[i].weight); for (int i = 0; i <= cas; ++i) { dp[i][0] = 0; for (int j = 1; j <= cas; ++j) dp[i][j] = INT_MAX; } for (int i=0;i<=cas;i++) dp[i][0]=0; for (int i=1;i<=cas;i++) for (int j=1;j<=i;j++) { dp[i][j]=min(dp[i][j],dp[i-1][j]); if (dp[i-1][j-1]!=INT_MAX &&dp[i-1][j-1]+src[i].weight<=src[i].power ) dp[i][j]=min(dp[i][j],dp[i-1][j-1]+src[i].weight); } int i; //printf("%d\n",cas); //for (int i=cas;i>0;i--) printf("dp[%d][%d]=%d\n",cas,i,dp[cas][i]); //for ( i=cas-1;i>=0;i--) printf("%d ",dp[cas-1][i]); for (i=cas;i>0;i--) if (dp[cas][i]<INT_MAX) break; if (i) printf("%d\n",i); else puts("1"); return 0; }
相关文章推荐
- UVA 10154 Weights and Measures(dp)
- Weights and Measures - UVa 10154 dp
- UVa 10154 Weights and Measures(经典DP)
- uva 10154 - Weights and Measures【dp】qi
- UVa 10154 - Weights and Measures dp 降维
- UVa 10154 - Weights and Measures dp 降维
- uva_10154 - Weights and Measures (普通DP)
- UVA 10154 Weights and Measures(贪心+DP最长上升子序列)
- uva 10154 - Weights and Measures【dp】qi
- uva 10154 Weights and Measures(dp)
- UVA 10154 Weights and Measures
- UVa 10154 - Weights and Measures
- UVa:10154 Weights and Measures
- uva 10154 Weights and Measures
- UVA - 10154 Weights and Measures
- UVA 10154 - Weights and Measures
- Weights and Measures+uva+一般dp
- UVA 10154 Weights and Measures 01背包
- UVA 10154 - Weights and Measures
- UVa 10154 - Weights and Measures